このコマンドを使用して、awk -v RS= '/index/' longfile > dataIwant
次の構造に基づいてデータ段落をファイルに保存します。dataIwant
longfile
index value count
1 -32.4613 1.00000
2 -20.5946 1.00000
3 -13.3573 1.00000
4 -13.2064 1.00000
5 -13.2064 0.00000
other stuff
index value count
1 -31.4613 1.00000
2 -19.5946 1.00000
3 -12.3573 1.00000
4 -12.2064 1.00000
5 -12.2064 0.00000
still a lot of other stuff
index value count
1 -33.4613 1.00000
2 -21.5946 1.00000
3 -15.3573 1.00000
4 -15.2064 0.00000
5 -15.2064 0.00000
again a lot of other stuff (and so on many times)
テーブル「インデックス、値、カウント」の最後のn(例:2)エントリのみをファイルに保存するのではなく、ファイルに保存する方法は?
予想出力:
index value count
1 -31.4613 1.00000
2 -19.5946 1.00000
3 -12.3573 1.00000
4 -12.2064 1.00000
5 -12.2064 0.00000
index value count
1 -33.4613 1.00000
2 -21.5946 1.00000
3 -15.3573 1.00000
4 -15.2064 0.00000
5 -15.2064 0.00000
答え1
最後のnレコードのスクロールバッファを保持してENDに印刷します。
$ cat tst.awk
BEGIN { RS=""; ORS="\n\n" }
/index/ { recs[(++c)%n] = $0 }
END {
for ( i=1; i<=n; i++ ) {
print recs[(++c)%n]
}
}
$ awk -v n=2 -f tst.awk file
index value count
1 -31.4613 1.00000
2 -19.5946 1.00000
3 -12.3573 1.00000
4 -12.2064 1.00000
5 -12.2064 0.00000
index value count
1 -33.4613 1.00000
2 -21.5946 1.00000
3 -15.3573 1.00000
4 -15.2064 0.00000
5 -15.2064 0.00000
答え2
一致する段落を配列に保存し、次のようにブロックのEND
最後の要素を印刷します。n
n=3
awk -v n=3 -v RS= '/index/{z[i++]=$0};END{for (j=i-n; j<=i; j++) print z[j]}' in > out