Печать последнего столбца строки в файле
У меня есть файл, который постоянно записывается в /updated. Я хочу найти последнюю строку, содержащую определенное слово, затем напечатать последний столбец этой строки.
Файл выглядит примерно так. С течением времени будут добавлены дополнительные строки 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, но ничего не выводится.
Есть ли способ сделать это?
Ответы
Ответ 1
Вы ничего не видите из-за буферизации. Вывод отображается, когда имеется достаточно строк или достигнут конец файла. 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
Благодаря комментарию @MitchellTracy tail
может пропустить запись, содержащую A1
и, таким образом, вы вообще ничего не получите. Эту проблему можно решить, переключив tail
и awk
, awk
поиск сначала в файле, а затем показав последнюю строку:
awk '/A1/ {print $NF}' file | tail -n1
Ответ 2
Чтобы напечатать последний столбец строки, просто используйте $(NF):
awk '{print $(NF)}'
Ответ 3
Вы можете сделать это без awk с помощью только нескольких труб.
tac file | grep -m1 A1 | rev | cut -d' ' -f1 | rev
Ответ 4
Один из способов: awk
:
tail -f file.txt | awk '/A1/ { print $NF }'
Ответ 5
Может быть, это работает?
grep A1 file | tail -1 | awk '{print $NF}'
Ответ 6
Вы можете сделать все это в awk
:
<file awk '$1 ~ /A1/ {m=$NF} END {print m}'
Ответ 7
Выполните это в файле:
awk 'ORS=NR%3?" ":"\n"' filename
и вы получите то, что ищете.
Ответ 8
grep A1 aaa.txt|tail -1|awk '{print $NF}'
Ответ 9
ls -l | awk '{print $9}' | tail -n1
Ответ 10
awk -F " " '($1=="A1") {print $NF}' FILE | tail -n 1
Используйте awk
с разделителем полей -F, установленным в пробел "".
Используйте шаблон $1=="A1"
и действие {print $NF}
, это будет печатать последнее поле в каждой записи, где первое поле - "A1". -n 1
результат в хвост и используйте параметр -n 1
чтобы показывать только последнюю строку.
Ответ 11
Использование Perl
$ 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
$