如何匹配awk中的hypen( - )和hash(#)符号?

时间:2016-12-09 20:59:25

标签: bash awk gawk

我正在尝试在hyphen的while循环中匹配hash signawk。我目前的设置是:

awk 'BEGIN { while ($1==# && $2==-) { #do stuff} }'

这显然会导致哈希符号出现语法错误。我已尝试以各种方式转义它,但这会导致语法错误,或“反斜杠不是最后一个字符在线”错误。

那么:我如何匹配hash sign表达式中的hyphenawk

1 个答案:

答案 0 :(得分:3)

while中的BEGIN可能不是您想要的,除非#do stuff包含next或其他声明以进入下一行输入。要回答您的具体问题,我假设您要检查每一行输入。我使用echo -e 'foo bar skip\n# - printme'提供两行输入:foo bar skip# - printme,我使用print $3代替#do stuff

echo -e 'foo bar skip\n# - printme' | awk '($1=="#" && $2=="-") { print $3 }'
                                              # ^ ^        ^ ^ double quotes

应该打印printme。您也可以使用正则表达式执行此操作:

 echo -e 'foo bar skip\n# - printme' | awk '($1~/^#$/ && $2~/^-$/) { print $3} '
                                             # ^^   ^      ^^   ^ regex match

~是正则表达式匹配运算符,//分隔正则表达式。 修改 ^$是正则表达式匹配整个字段,并且如果仅仅{em}包含$1,则不会成功连字符。

在cygwin上的gawk 4.1.3上进行了测试。