2017-07-02 58 views
1

在尝试在awk中跳过括号时,我遇到了一个相当奇怪的问题。我的文件有以下行在窗口中的gawk中跳过括号

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'但没有实际工作更换"\(m2"

关于如何使其工作的任何想法?

+0

只需使用单引号代替双,像这样:'GAWK '/ 79 - 金 - 196异构体状态人口/ {如果($ 7 == “(M1”)打印$ 5}'' – randomir

+0

@randomir:非常感谢您的评论。我也尝试了这个,但是我得到了下面的'gawk:'/ 79-Au-196 gawk:^表达式中的^ invalid char''' – Thanos

+0

@randomir: ),但OP在_Windows_上运行命令。 – mklement0

回答

1

TL;博士:

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

  • 的Windows,你必须使用"..."(双引号)在你gawk脚本。

    • '...'引用(单引号) - 这应该总是被用来在的Unix平台划定awk脚本 - 不被认可cmd.exe
  • 这就要求\ -escaping任何"情况脚本。

  • 相比之下,((括号)不需要在$7==\"(m1\"逃脱,因为你使用它字符串文字是比较有==字段值内gawk的观点。