Подтвердить что ты не робот

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

У меня есть файл, который постоянно записывается в /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, но ничего не выводится.

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

4b9b3361

Ответ 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

$