当我试图逃避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'
,但实际上没有任何效果。
关于如何使其发挥作用的任何想法?
答案 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;在字符串文字中重复使用它,与==
的字段值进行比较。