Печать последнего столбца строки в файле


у меня есть файл, который постоянно записываются/обновляются. Я хочу найти последнюю строку, содержащую определенное слово, а затем распечатать последний столбец этой строки.

файл выглядит примерно так. Со временем к нему будет добавлено больше строк A1/B1/C1.

A1 123 456
B1 234 567
C1 345 678
A1 098 766
B1 987 6545
C1 876 5434

Я пытался использовать

tail -f file | grep A1 | awk '{print $NF}'

для вывода значения 766, но ничего не выводится.

есть ли способ сделать это?

8 68

8 ответов:

вы ничего не видите, из-за буферизации. Вывод отображается, когда достаточно строк или достигнут конец файла. tail -f означает ждать больше ввода, но нет больше строк в file и так по трубе до grep никогда не закрывается.

если вы опустите -f С tail вывод отображается сразу:

tail file | grep A1 | awk '{print $NF}'

@EdMorton, конечно, прав. Awk поиск A1 а также, что сокращает командную строку к

tail file | awk '/A1/ {print $NF}'

или без хвоста, показывая последний столбец всех строк, содержащих A1

awk '/A1/ {print $NF}' file

вы можете сделать это без awk только с некоторыми трубами.

tac file | grep -m1 A1 | rev | cut -d' ' -f1 | rev

один из способов, используя awk:

tail -f file.txt | awk '/A1/ { print $NF }'

для печати последнего столбца строки просто используйте $(NF):

awk '{print $(NF)}' 

Вы можете сделать все это в awk:

<file awk ' ~ /A1/ {m=$NF} END {print m}'

может быть, это работает?

grep A1 file | tail -1 | awk '{print $NF}'

выполните это в файле:

awk 'ORS=NR%3?" ":"\n"' filename

и вы получите то, что вы ищете.

ls -l | awk '{print }' | tail -n1