回答:
バッファリングのため、何も表示されません。十分な行があるか、ファイルの終わりに達すると、出力が表示されます。tail -f
より多くの入力を待つことを意味しますが、ラインがなくなるfile
ため、パイプgrep
が閉じられることはありません。
出力-f
から省略しtail
た場合、すぐに表示されます:
tail file | grep A1 | awk '{print $NF}'
もちろん@EdMortonは正しいです。AwkはA1
同様に検索できるため、コマンドラインが次のように短縮されます。
tail file | awk '/A1/ {print $NF}'
または尾なし、を含むすべての行の最後の列を表示 A1
awk '/A1/ {print $NF}' file
@MitchellTracyのコメントのおかげでtail
、レコードが含まれていない可能性A1
があり、出力がまったく得られません。これは、スイッチングによって解決することができるtail
とawk
、ファイルを介して第1の検索だけにして最後の行を示しています。
awk '/A1/ {print $NF}' file | tail -n1
tail
が提供するウィンドウに列が表示されない可能性があるため、これは正しくありません。特定の頻度で表示されることがわかっている場合を除いて、の方が安全awk '/A1/ {print $NF}' file | tail -n1
です。
行の最後の列を印刷するには、$(NF)を使用します。
awk '{print $(NF)}'
これは、awkを使用せずに、パイプをいくつか使用するだけで実行できます。
tac file | grep -m1 A1 | rev | cut -d' ' -f1 | rev
Perlの使用
$ cat rayne.txt
A1 123 456
B1 234 567
C1 345 678
A1 098 766
B1 987 6545
C1 876 5434
$ perl -lane ' /A1/ and $x=$F[2] ; END { print "$x" } ' rayne.txt
766
$
perl -lane 'print $F[2] if /A1/' rayne.txt