Parsing 使用Awk解析文本文件

Parsing 使用Awk解析文本文件,parsing,awk,Parsing,Awk,我想解析一个文本文件,其感兴趣的部分如下: mesh 0 400 12000 400 300 400 1 0 -1 300 500 600 0 0 1 etc.... 12000 1300 1100 etc.. 我只想要紧跟在以stringmesh开头的行之后的行,以及紧跟其后的每一行,并且有3列。我希望这个输出是在一个单独的文本文件修改名称 因此,需要输出文本文件: 400 300 400 300 500 600 我试着用python和循环来实现这一点,但实际上这需要几个小时,而且从未完成

我想解析一个文本文件,其感兴趣的部分如下:

mesh 0 400 12000
400 300 400
1 0 -1
300 500 600
0 0 1
etc....
12000
1300
1100
etc..
我只想要紧跟在以string
mesh
开头的行之后的行,以及紧跟其后的每一行,并且有3列。我希望这个输出是在一个单独的文本文件修改名称

因此,需要输出文本文件:

400 300 400
300 500 600
我试着用python和循环来实现这一点,但实际上这需要几个小时,而且从未完成,因为原始文本文件中有数千到十万行


在使用awk的bash脚本中,有没有更有效的方法来实现这一点?

awk
来拯救

$ awk '/^mesh/{n=NR;next} NF==3 && n && NR%2==(n+1)%2' file > filtered_file
400 300 400
300 500 600

为什么
1 0-1
0 0 1
不在输出中?它们也有三列。我只希望网格后每隔一行。所以在python中,我知道我可以通过使用mod函数来指定这一点。如果网格被计算为第1行,那么下一行将是第2行,在第3、4、5行之后,等等。我只对包含3个colmun的偶数行(%2)感兴趣(因为这些行在某一点上会变成一个列)。Python还具有正则表达式功能。这个问题似乎可以用一个相当简单的Python脚本来解决——不需要使用bash和awk。首先,您可以扫描以
mesh
开头的行,可以说,“打开开关”。现在,也许在嵌套循环中,您可以开始查找行。像
split
这样的函数可能很简单,或者一个正则表达式可以查找由空格分隔的三组数字。深呼吸,然后再试一次。或者,发布您第一次尝试的摘录。谢谢!!这正是我需要的!最初我尝试过类似的方法,但对语法不够熟悉,无法使其正常工作。输出到新文件也可以!