2017-07-02 50 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的觀點。