Sorunuza yorum yaptığınızda awk
, gerçekten gitmek için bir yoldur. Kev'in cevabının gösterdiği gibi boşlukları sıkmak cut
ile birlikte kullanmak mümkündür .tr -s
Ancak gelecekteki okuyucular için olası tüm kombinasyonları gözden geçirmeme izin verin. Açıklamalar Test bölümünde bulunmaktadır.
tr | kesmek
tr -s ' ' < file | cut -d' ' -f4
awk
awk '{print $4}' file
darbe
while read -r _ _ _ myfield _
do
echo "forth field: $myfield"
done < file
sed
sed -r 's/^([^ ]*[ ]*){3}([^ ]*).*/\2/' file
Testler
Bu dosya verildiğinde, komutları test edelim:
$ 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 | kesmek
$ 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
darbe
Bu alanları sırayla okur. Bunu kullanarak _
, bu alanları yoksaymak için "önemsiz değişken" olarak bir değişken değişken olduğunu belirtiriz. Bu şekilde, $myfield
aralarındaki boşluklar ne olursa olsun dosyada 4. alan olarak depolarız .
$ while read -r _ _ _ a _; do echo "4th field: $a"; done < a
4th field: 1
4th field: 2
4th field: 3
4th field: 4
sed
Bu, üç boşluk grubunu yakalar ve birlikte boşluk bırakmaz ([^ ]*[ ]*){3}
. Daha sonra, 4. alan olarak bir alana kadar gelen her şeyi yakalar ve sonunda yazdırılır \1
.
$ sed -r 's/^([^ ]*[ ]*){3}([^ ]*).*/\2/' a
1
2
3
4