在bash/sed/awk中提取文件的最后一个单词

Wam*_*miq 6 bash awk sed file

我想a.txt在bash/sed/awk中提取文件的最后一个单词.

我该怎么做?

Jot*_*tne 17

要获得最后一行中的最后一个字:

awk 'END {print $NF}' file
Run Code Online (Sandbox Code Playgroud)

  • +1用于理解问题.. :) (3认同)

fed*_*qui 6

更新.

如果您想使用awk并确保有单词,请使用:

tac a.txt | awk 'NF{print $NF; exit}'
Run Code Online (Sandbox Code Playgroud)

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.
Run Code Online (Sandbox Code Playgroud)

或者,正如Kent建议的那样:

awk '{w=NF?$NF:w} END{print w}' file
Run Code Online (Sandbox Code Playgroud)

w=$NF?$NF:w.这是一个三元运算符:if NF>0(无空行),设置w为最后一个字段.否则,保持原样.最后,在END{},打印最后保存的单词.


如果你想使用它sed,你可以使用它,这适用于最后没有空行:

sed -n '${s/.* //; p}' a.txt
Run Code Online (Sandbox Code Playgroud)

说明

  • $代表文件的最后一行.在那种情况下,做内部的事情{}.
  • s/.* //; p删除一切到最后的空间.然后打印p.

  • +1因为OP说没有空行,所以要容易得多.,我只想评论'awk'{w = $ NF?$ NF:w} END {print w}'file` (3认同)