$NF
如果我们不知道最后一列号,我们可以打印文件中每一行的最后一列。
但我面临的困难是最后一列有一个空值。
例如,解析who
命令
$ who
root tty1 2018-01-25 09:36
root pts/0 2018-05-30 07:39 (192.168.1.134)
root pts/1 2018-05-28 23:12 (192.168.1.134)
root pts/2 2018-06-01 10:01 (192.168.1.188)
得到结果:
$ who | awk '{print $NF}'
09:36
(192.168.1.134)
(192.168.1.134)
(192.168.1.188)
预期结果
(192.168.1.134) (192.168.1.134) (192.168.1.188)
让我知道在单行中获得预期结果的可能性。
编辑 1:上述情况只是一个例子。我不喜欢更改分隔符来达到结果。
编辑 2:字段少于最大值的行中没有任何内容(输出的空行)
要仅输出具有最大列数的行的最后一列,您可以执行以下操作:
要为每一行输入输出一行,但对于没有最大列数的行为空:
如果您只希望拥有最多字段的行中的最后一个字段,则需要两次读取数据:一次找出最多的字段数,另一次打印字段。只读一次并不能解决问题:任何一行都可以有比以前更多的字段,而且没有办法知道。
使用
awk
(注意文件名给出了两次):如果
file
包含这将打印第四个字段,或者对于没有它的行为空:
这当然不适用于管道,您必须使用临时文件。
另一种解决方案可以缓存要打印的字段,直到出现包含更多字段的行,如Stéphane 的回答。
检查第 5 个字段是否匹配
\(.*\)
,如果匹配则打印。如果您只对
ip
地址感兴趣,请更改正则表达式:如果您只想在此列可用的情况下获取最后一列,请使用您不想要的行只有四列的事实:
或者,为了获得类似的数据,