次のセクションを含む巨大なファイルを作成しています。
~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~ Gradients ~~~~~~~~
~~~~~~~~~ x y z ~~~~~~~~~~
~ ~
~ H 1 0.00781 0.00108 0.00038 ~
~ H 2 0.01271 -0.01507 0.02839 ~
~ C 1 -0.05015 -0.01803 0.01588 ~
~ O 1 0.01733 0.03089 -0.04611 ~
~ O 2 0.01230 0.00114 0.00147 ~
~ ~
~~~~~~~~~~~~~~~~~~~~~~~~
次の数字(xyz)を抽出する必要があります。
0.00781 0.00108 0.00038
0.01271 -0.01507 0.02839
-0.05015 -0.01803 0.01588
0.01733 0.03089 -0.04611
0.01230 0.00114 0.00147
私は次のスクリプトを書いた。
awk '/z ~/ {for(i=1; i<=6; i++) {getline; print $4, $5, $6}}' filename
しかし、「~~」行のため空の行が出てきます。
つまり、/z ~/
パターンが見つかるたびに別の行(パターン+1)をスキップして、他の5行(パターン+2+3+4+5+6)の内容だけを印刷したいのです。もちろん繰り返し(数十万回)が必要です。
ベストアンサー1
アッ解決策:
awk '/z ~/{ n=NR+2 }n && n<=NR && NR<(n+5){ print $4,$5,$6 }' file | column -t
出力:
0.00781 0.00108 0.00038
0.01271 -0.01507 0.02839
-0.05015 -0.01803 0.01588
0.01733 0.03089 -0.04611
0.01230 0.00114 0.00147
NR
- 現在のレコード数n=NR+2
-n
モデルラインの後の「スタート」ライン番号を示します。