使用bash在两个正则表达式之间提取数据,同时保持格式

时间:2016-09-18 16:28:21

标签: bash awk

但我对使用awk命令的一小段代码有疑问。我没有在任何地方找到答案/解决方案。

我正在尝试解析输出文件并提取第一个表达式(包括)ATOMIC和第二个表达式(不包括)Bond之间的所有数据。此数据将发送到新文件$1_geom。到目前为止,我有以下内容:

`awk '/ATOMIC/{flag=1;next}/Bond lengths in Bohr/{flag=0}flag' $1` >> $1_geom

此脚本将为我提取正确的数据,但有两个问题:

  1. 不会使用数据

  2. 提取行ATOMIC
  3. 提取数据并将其附加到一行。我希望数据保留解析文件的格式(5列,可变行数)。请参阅附件以查看视觉效果。 Visual Example Attachment。是否有不同的方式来追加数据(>>除外),以便我可以保持格式化?

  4. 感谢任何帮助,谢谢。

2 个答案:

答案 0 :(得分:0)

next导致第一个匹配被跳过;如果你不想要它,请把它拿出来。

反引号本身就是shell语法错误(除非您的Awk脚本碰巧产生有效的shell命令)。我猜你在实际的脚本中有一个useless echo或类似的东西可以解除错误,但会产生你描述的症状。

答案 1 :(得分:0)

这是csh脚本中代码的一部分,我在这一行前面确实有一个“echo”。删除“回声”使其完美运行并解决了我遇到的两个问题。