Mam plik, który jest stale zapisywany / aktualizowany. Chcę znaleźć ostatnią linię zawierającą określone słowo, a następnie wydrukować ostatnią kolumnę tego wiersza.
Plik wygląda mniej więcej tak. Z czasem zostanie do niego dołączonych więcej linii A1 / B1 / C1.
A1 123 456
B1 234 567
C1 345 678
A1 098 766
B1 987 6545
C1 876 5434
Próbowałem użyć
tail -f file | grep A1 | awk '{print $NF}'
wydrukować wartość 766, ale nic nie jest wyświetlane.
Czy jest na to sposób?
tail
daje ci raw . O ile nie wiesz, że będzie się to pojawiało z określoną częstotliwością, byłoby to bezpieczniejszeawk '/A1/ {print $NF}' file | tail -n1
.Aby wydrukować ostatnią kolumnę wiersza, użyj $ (NF):
awk '{print $(NF)}'
źródło
W jedną stronę za pomocą
awk
:tail -f file.txt | awk '/A1/ { print $NF }'
źródło
awk
tajemniczą składnię :)Możesz to zrobić bez awk, używając tylko kilku potoków.
tac file | grep -m1 A1 | rev | cut -d' ' -f1 | rev
źródło
może to działa?
grep A1 file | tail -1 | awk '{print $NF}'
źródło
Możesz to wszystko zrobić w
awk
:<file awk '$1 ~ /A1/ {m=$NF} END {print m}'
źródło
Korzystanie z Perla
$ cat rayne.txt A1 123 456 B1 234 567 C1 345 678 A1 098 766 B1 987 6545 C1 876 5434 $ perl -lane ' /A1/ and $x=$F[2] ; END { print "$x" } ' rayne.txt 766 $
źródło
perl -lane 'print $F[2] if /A1/' rayne.txt
awk -F " " '($1=="A1") {print $NF}' FILE | tail -n 1
Należy używać
awk
z separatorem pól -F ustawionym na spację „”.Użyj wzorca
$1=="A1"
i akcji.{print $NF}
Spowoduje to wydrukowanie ostatniego pola w każdym rekordzie, w którym pierwsze pole to „A1”. Przełóż wynik do końca i użyj-n 1
opcji, aby pokazać tylko ostatnią linię.źródło
Nie jest to rzeczywisty problem, ale może komuś pomóc: robiłem
awk "{print $NF}"
, zanotuj niewłaściwe cytaty. Powinien byćawk '{print $NF}'
, aby powłoka się nie rozszerzyła$NF
.źródło
Wykonaj to na pliku:
awk 'ORS=NR%3?" ":"\n"' filename
a dostaniesz to, czego szukasz.
źródło
ls -l | awk '{print $9}' | tail -n1
źródło