回答:
awk '{print $(NF-1)}'
うまくいくはず
awk -F '.' '{print $(NF-2)}'
$(..)
は、使用しているシェルに応じてサブシェルでコマンドを呼び出すために発生します。の$ (NF-1)
代わりにを使用して、これを回避でき$(NF-1)
ます。
awk ' { print ( $(NF-1) ) }' file
あなたは結果から遠くない!これはそれを行います:
awk '{NF--; print $NF}' file
これにより、フィールドの数が1つ$NF
減るので、前から2番目のフィールドが含まれます。
いくつかの数値を生成して、5つのグループに出力してみましょう。
$ seq 12 | xargs -n5
1 2 3 4 5
6 7 8 9 10
11 12
各行に最後から2番目を印刷してみましょう。
$ seq 12 | xargs -n5 | awk '{NF--; print $NF}'
4
9
11
Chris Kannonのawkソリューションに似たPerlソリューション:
perl -lane 'print $F[$#F-1]' file
次のコマンドラインオプションが使用されます。
n
入力ファイルのすべての行をループし、自動的にすべての行を印刷しない
l
処理前に改行を削除し、後で追加します
a
自動分割モード–入力行を@F
配列に分割します。デフォルトでは空白での分割
e
Perlコードを実行する
@F
awkのフィールドは$ 1を開始しながら、自動split配列[0]インデックスから始まります。
$#F
は要素数です@F
$F[-2]
最初に値を減らしてから、それを出力します-
awk ' { print $(--NF)}' file
または
rev file|cut -d ' ' -f2|rev
NF
は最後のフィールドインデックス、$NF
は最後のフィールドの値