簡體   English   中英

打印文件中一行的最后一列

[英]Printing the last column of a line in a file

我有一個不斷被寫入/更新的文件。 我想找到包含特定單詞的最后一行,然后打印該行的最后一列。

該文件看起來像這樣。 隨着時間的推移,將添加更多 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,但沒有輸出任何內容。

有沒有辦法做到這一點?

由於緩沖,您什么也看不到。 當有足夠的行或到達文件末尾時,將顯示輸出。 tail -f表示等待更多輸入,但file中沒有更多行,因此grep的管道永遠不會關閉。

如果省略tail-f ,則立即顯示輸出:

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的記錄,因此您根本得不到任何輸出。 這可以通過切換tailawk來解決,首先搜索文件,然后才顯示最后一行:

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

要打印一行的最后一列,只需使用 $(NF):

awk '{print $(NF)}' 

使用awk一種方法:

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

你可以在沒有 awk 的情況下使用一些管道來做到這一點。

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

也許這有效?

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

您可以在awk完成所有操作:

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

使用 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

$

awk -F " " '($1=="A1") {print $NF}' FILE | tail -n 1

使用awk並將字段分隔符-F設置為空格“”。

使用模式$1=="A1"action {print $NF} ,這將打印每個記錄中第一個字段是“A1”的最后一個字段。 將結果通過管道傳輸到 tail 並使用-n 1選項僅顯示最后一行。

不是這里的實際問題,但可能對某些人有所幫助:我在做awk "{print $NF}" ,注意錯誤的引號。 應該是awk '{print $NF}' ,這樣外殼就不會擴展$NF

在文件上執行此操作:

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

你會得到你想要的。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM