末尾から 3 次元の特定のレコードを出力する必要があります。つまり、NR == 合計 NR-2 です。私はほぼ1時間それをやろうとしてきましたが、まだうまくいかないので、これが私が持っているものです:
cat myfile | grep mystring | awk 'END {NR == $(NR-2); print $0}'
これで最後の NR が得られます。なぜですか?
末尾から 3 次元の特定のレコードを出力する必要があります。つまり、NR == 合計 NR-2 です。私はほぼ1時間それをやろうとしてきましたが、まだうまくいかないので、これが私が持っているものです:
cat myfile | grep mystring | awk 'END {NR == $(NR-2); print $0}'
これで最後の NR が得られます。なぜですか?
awk
各行を処理し、完了したら破棄するだけなので、手動で保存する必要があります [注NR == $(NR-2)
: 行数が最後の行の (行数 - 2) 番目のフィールドと等しいかどうかを確認します]。それらをすべて格納するのが最も簡単ですが、メモリ効率があまりよくないため、最近見た 3 つだけを格納できます。実際には、最も簡単なのはhead
andを使用することtail
です:
grep mystring myfile | tail -n3 | head -n1
またはawk
:
awk '/mystring/{three = two; two = one; one = $0} END{print three}' myfile