AWK問題:指定された/ pattern /の後の3行目から始めて、N行を印刷します。

AWK問題:指定された/ pattern /の後の3行目から始めて、N行を印刷します。

次のセクションを含む巨大なファイルを作成しています。

~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~ 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モデルラインの後の「スタート」ライン番号を示します。

おすすめ記事