【发布时间】:2018-10-27 22:18:44
【问题描述】:
我想解析一个包含感兴趣部分的文本文件,如下所示:
mesh 0 400 12000
400 300 400
1 0 -1
300 500 600
0 0 1
etc....
12000
1300
1100
etc..
我只想要紧跟以字符串mesh 开头的行以及之后的所有其他行,并且有 3 列。我希望此输出位于一个单独的文本文件中,并带有修改的名称。
所以想要的输出文本文件:
400 300 400
300 500 600
我尝试使用 python 和循环来执行此操作,但实际上花了几个小时并且从未完成,因为原始文本文件中有数千到数十万行。
在使用 awk 的 bash 脚本中是否有更有效的方法?
【问题讨论】:
-
为什么
1 0 -1和0 0 1不在输出中?它们也有三列。 -
我只想在网格之后每隔一行。所以在 python 中,我知道我可以通过使用 mod 函数来指定它。如果网格被计为第 1 行,那么下一行将是 2,然后是 3、4、5 等。我只对包含 3 个 colmun 的偶数行 (%2) 感兴趣(因为这些行在某些时候会变成单列点)
-
Python 也具有正则表达式功能。这个问题看起来可以用一个相当简单的 Python 脚本来解决——不需要使用 bash 和 awk。首先,您扫描以找到以
mesh开头的行,可以说,“打开开关”。现在,也许在嵌套循环中,您开始寻找行。像split这样的函数可能很简单——或者是一个查找由空格分隔的三组数字的正则表达式。深吸一口气,然后再试一次。或者,发布您第一次尝试的摘录。