0

末尾から 3 次元の特定のレコードを出力する必要があります。つまり、NR == 合計 NR-2 です。私はほぼ1時間それをやろうとしてきましたが、まだうまくいかないので、これが私が持っているものです:

cat myfile | grep mystring | awk 'END {NR == $(NR-2); print $0}'

これで最後の NR が得られます。なぜですか?

4

2 に答える 2

2

awk各行を処理し、完了したら破棄するだけなので、手動で保存する必要があります [注NR == $(NR-2): 行数が最後の行の (行数 - 2) 番目のフィールドと等しいかどうかを確認します]。それらをすべて格納するのが最も簡単ですが、メモリ効率があまりよくないため、最近見た 3 つだけを格納できます。実際には、最も簡単なのはheadandを使用することtailです:

grep mystring myfile | tail -n3 | head -n1

またはawk

awk '/mystring/{three = two; two = one; one = $0} END{print three}' myfile
于 2012-05-23T19:24:24.220 に答える
0

2 つの可能性があります。

コマンドtac (cat の代わりに) を使用して、ファイルを逆に (末尾から先頭へ)、3 番目を出力できます。

またはバッファを使用して、最後のx結果をメモリに入れます

于 2012-05-23T19:23:08.140 に答える