ในขณะที่คุณแสดงความคิดเห็นในคำถามของคุณawk
เป็นวิธีที่จะไป ที่จะใช้cut
เป็นไปได้พร้อมกับtr -s
การบีบช่องว่างตามคำตอบของเคฟแสดงให้เห็น
ให้ฉันผ่านชุดค่าผสมที่เป็นไปได้ทั้งหมดสำหรับผู้อ่านในอนาคต คำอธิบายอยู่ที่ส่วนการทดสอบ
tr | ตัด
tr -s ' ' < file | cut -d' ' -f4
awk
awk '{print $4}' file
ทุบตี
while read -r _ _ _ myfield _
do
echo "forth field: $myfield"
done < file
sed
sed -r 's/^([^ ]*[ ]*){3}([^ ]*).*/\2/' file
การทดสอบ
รับไฟล์นี้มาทดสอบคำสั่งกันเถอะ:
$ cat a
this is line 1 more text
this is line 2 more text
this is line 3 more text
this is line 4 more text
tr | ตัด
$ cut -d' ' -f4 a
is
# it does not show what we want!
$ tr -s ' ' < a | cut -d' ' -f4
1
2 # this makes it!
3
4
$
awk
$ awk '{print $4}' a
1
2
3
4
ทุบตี
นี่จะอ่านฟิลด์ตามลำดับ โดยการใช้_
เราระบุว่านี่เป็นตัวแปร Throwaway เป็น "ตัวแปรขยะ" เพื่อละเว้นฟิลด์เหล่านี้ ด้วยวิธีนี้เราเก็บ$myfield
เป็นฟิลด์ที่ 4 ในไฟล์ไม่ว่าจะมีช่องว่างอยู่ระหว่างนั้นหรือไม่
$ while read -r _ _ _ a _; do echo "4th field: $a"; done < a
4th field: 1
4th field: 2
4th field: 3
4th field: 4
sed
([^ ]*[ ]*){3}
นี้จับสามกลุ่มของช่องว่างและไม่มีช่องว่างด้วย จากนั้นจะจับอะไรก็ตามมาจนพื้นที่ที่เป็นเขตที่ 4 \1
ที่ว่ามันจะถูกพิมพ์สุดท้ายกับ
$ sed -r 's/^([^ ]*[ ]*){3}([^ ]*).*/\2/' a
1
2
3
4