Saat Anda mengomentari pertanyaan Anda, awk
ini benar-benar cara yang harus ditempuh. Untuk menggunakan cut
dimungkinkan bersama dengan tr -s
menekan spasi, seperti yang ditunjukkan oleh kev .
Namun, biarkan saya membaca semua kombinasi yang mungkin untuk pembaca di masa mendatang. Penjelasan ada di bagian Uji.
tr | memotong
tr -s ' ' < file | cut -d' ' -f4
awk
awk '{print $4}' file
pesta
while read -r _ _ _ myfield _
do
echo "forth field: $myfield"
done < file
sed
sed -r 's/^([^ ]*[ ]*){3}([^ ]*).*/\2/' file
Tes
Diberikan file ini, mari kita coba perintah:
$ 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 | memotong
$ 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
pesta
Ini membaca bidang secara berurutan. Dengan menggunakan _
kami menunjukkan bahwa ini adalah variabel yang dapat dibuang sebagai "variabel sampah" untuk mengabaikan bidang ini. Dengan cara ini, kami menyimpan $myfield
sebagai bidang ke-4 dalam file, tidak peduli ruang di antaranya.
$ while read -r _ _ _ a _; do echo "4th field: $a"; done < a
4th field: 1
4th field: 2
4th field: 3
4th field: 4
sed
Ini menangkap tiga kelompok ruang dan tidak ada ruang dengan ([^ ]*[ ]*){3}
. Kemudian, ia menangkap apa pun yang datang sampai ruang sebagai bidang ke-4, yang akhirnya dicetak bersama \1
.
$ sed -r 's/^([^ ]*[ ]*){3}([^ ]*).*/\2/' a
1
2
3
4