AWK - 打印最后一列和空值

Siv*_*iva 2 linux awk shell-script

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

得到结果:

$ who | awk '{print $NF}'
09:36
(192.168.1.134)
(192.168.1.134)
(192.168.1.188)
Run Code Online (Sandbox Code Playgroud)

预期结果

(192.168.1.134)
(192.168.1.134)
(192.168.1.188)

让我知道在单行中获得预期结果的可能性。

编辑 1:上述场景只是一个例子。我不喜欢更改分隔符来实现结果。

编辑 2:字段少于最大值的行中没有任何内容(输出的空行)

Sté*_*las 5

要仅输出具有最大列数的行的最后一列,您可以执行以下操作:

who | awk '
  NF > max  {max = NF; output = ""}
  NF == max {output = output $NF ORS}
  END       {printf "%s", output}'
Run Code Online (Sandbox Code Playgroud)

为每一行输入输出一行,但对于没有最大列数的行为空:

who | awk '
  NF > max {max = NF}
  {n[NR] = NF}
  NF == max {last[NR] = $NF}
  END {for (i = 1; i <= NR; i++) print n[i] == max ? last[i] : ""}'
Run Code Online (Sandbox Code Playgroud)