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