AWK 问题:打印 N 行,从给定 /pattern/ 之后的第三行开始

Mar*_*zko 4 awk text-processing

我正在制作一个巨大的文件,其中包括这样的部分:

~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~ 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 ~
~ ~
~~~~~~~~~~~~~~~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)

我需要提取这些数字(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
Run Code Online (Sandbox Code Playgroud)

我写了以下脚本:

awk '/z ~/ {for(i=1; i<=6; i++) {getline; print $4, $5, $6}}' filename
Run Code Online (Sandbox Code Playgroud)

但是由于“〜〜”行,它给了我一个空行。

换句话说,每次找到/z ~/模式时,我都想跳过另一行(模式+1),只打印其他五行(模式+2+3+4+5+6)的内容。当然,它需要是一个重复的操作(一遍又一遍,数十万次)。

Rom*_*est 6

awk解决方法:

awk '/z ~/{ n=NR+2 }n && n<=NR && NR<(n+5){ print $4,$5,$6 }' file | column -t
Run Code Online (Sandbox Code Playgroud)

输出:

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
Run Code Online (Sandbox Code Playgroud)
  • NR - 当前记录号

  • n=NR+2-n这里指向模式行后的“起始”行号