簡體   English   中英

在bash / sed / awk中提取文件的最后一個單詞

[英]Extract last word of a file in bash/sed/awk

我想在bash / sed / awk中提取文件的最后一個單詞a.txt

我該怎么做?

要獲得最后一行中的最后一個字:

awk 'END {print $NF}' file

更新。

如果你想使用awk並確保有一個單詞,請使用:

tac a.txt | awk 'NF{print $NF; exit}'

tac反向打印文件。 {}塊前面的NF使得它在行不為空時起作用。 在這種情況下,它打印最后一個字段( NF代表字段數,因此$NF是最后一個字段),然后退出。

測試

$ cat a
hello my name
is blabla
and this is
my comment.
                      <--- note an empty line
$ tac a | awk 'NF{print $NF; exit}'
comment.

或者,正如Kent建議的那樣

awk '{w=NF?$NF:w} END{print w}' file

w=$NF?$NF:w 這是一個三元運算符:如果NF>0 (無空行),則將w設置為最后一個字段。 否則,保持原樣。 最后,在END{} ,打印最后保存的單詞。


如果你想用sed制作它,你可以使用它,以防萬一最后沒有空行:

sed -n '${s/.* //; p}' a.txt

說明

  • $代表文件的最后一行。 在那種情況下,做{}
  • s/.* //; p s/.* //; p將所有內容移除到最后一個空格。 然后打印p

嘗試這個awk命令,

awk -v RS="\0" '{print $NF}' file

RS="\\0"將文件中的所有記錄轉換為單個記錄。 然后{print $NF}打印該單條記錄的最后一個字段。

你也可以使用sed命令,

$sed -nr '${s/.* (.*)$/\1/pg}' File_name

使用tail和grep:

tail -1 myFile.txt | grep -oE '[^ ]+$'

你也可以用greptail得到最后一個單詞:

<a.txt grep -o '\w\+' | tail -n1

sed變體支持空的最后一行(如果有的話):

sed -n '/[^ ]/h; ${g;s/ *$//; s/.* //p}' a.txt

這可能適合你(GNU sed):

sed -r '/\w/{s/.*\W(\w+)\W*$/\1/;h};$!d;x;/./!d' file

將當前行的最后一個單詞保存在保留空間中,然后刪除該行。 在文件的末尾,它檢索最后一個單詞並將其打印出來,除非沒有單詞,在這種情況下它會刪除空行。

另一種方法是將整個文件粘貼到內存中:

sed -r ':a;$!{N;ba};s/.*\W(\w+)\W*$/\1/p;d' file
 sed -n '/^$/!{$ s/.* \(\w*\)$/\1/p}'

這將省略空行並在最后一個非空行上打印最后一個單詞。

  • / ^ $ /! 找到非空行
  • $ s /在最后一行替代
  • 。*(\\ w *)$捕獲()之間的任何內容
  • \\ 1捕獲組的替代線()
  • 打印出來

暫無
暫無

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

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