在窗口中以gawk转义括号

时间:2017-07-02 18:20:20

标签: windows awk escaping gawk parentheses

当我试图逃避awk中的括号时,我遇到了一个相当奇怪的问题。我的文件有以下行

79-Au-196 isomer state population  0.153658     mb (m1 E= 0.5957MeV Jp=-12.0)

所以我想提取第5列(即0.153658)。为此,我运行以下

>gawk "/79-Au-196 isomer state population/{if($7=="\(m1")print $5}" Au_test.out

我得到的是

> gawk: /79-Au-196 isomer state population/{if($7==\(m1)print $5} gawk: 
>                                                  ^ backslash not last character on line

我尝试用"\(m2""%s(m2"替换'\(m2',但实际上没有任何效果。

关于如何使其发挥作用的任何想法?

1 个答案:

答案 0 :(得分:1)

<强> TL; DR:

gawk "/79-Au-196 isomer state population/{if($7==\"(m1\")print $5}" Au_test.out
  • Windows 上,您必须围绕"..."脚本使用gawk(双引号)。

    • '...'引用(单引号) - 应该始终用于界定 Unix 平台上的awk脚本 - cmd.exe无法识别。
  • 这需要\ - 转义脚本中的所有"个实例

  • 相比之下,((括号) 需要在$7==\"(m1\"中进行转义,因为从gawk的角度来看,您可以#39;在字符串文字中重复使用它,与==的字段值进行比较。