AWK - 最後の列とnull値を出力します。

AWK - 最後の列とnull値を出力します。

$NF最後の列番号がわからない場合は、ファイルの各行の最後の列を印刷できます。

しかし、私が直面する難しさは、最後の列にNULL値があることです。

例えば、構文解析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行で希望の結果を得る可能性を教えてください。

編集1:上記のシナリオは単なる例です。結果を得るために区切り文字を変更するのは好きではありません。

編集2:最大値より少ないフィールド数を持つ行には何も含まれません(空の出力行)。

ベストアンサー1

最大列数を持つ行の最後の列のみを出力するには、次のようにします。

who | awk '
  NF > max  {max = NF; output = ""}
  NF == max {output = output $NF ORS}
  END       {printf "%s", output}'

入力の各行に対して1行を出力しますが、最大列数を持たない行の場合は空です。

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] : ""}'

おすすめ記事