Shell脚本中awk条件判断语法错误求助:写法差异致报错
问题分析与解决
这问题我之前踩过同款坑,核心是你混淆了Shell变量引用语法和awk的字段引用规则,还有字符串匹配的细节没注意到!
1. 字段引用的语法错误
awk里引用第N个字段的正确写法是直接用$N,比如第一个命令里的$4就是引用第4个字段,完全符合awk的语法规则。
但你第二个命令里写的${12}是Shell中引用变量的语法(比如Shell里${var}用来引用变量var),awk根本不认识这种写法,所以才会抛出syntax error——它把${12}当成了非法的语法结构。
2. 字符串匹配的遗漏
另外,你写的==W里的W如果是要匹配的字符串常量,必须用引号(单引号或双引号)括起来,写成=="W"。如果不加引号,awk会把W当成一个未定义的变量,值为空,这显然不是你想要的匹配效果。
修正后的代码
把第二个命令里的awk部分改成正确写法就能正常运行了:
c=`zgrep "600" $present_date$b$a* | awk -F "," '$12=="W" {print $3}' | sort | uniq | wc -l`
额外小提示
如果是匹配数字(比如第一个命令里的600),加不加引号都可以,awk会自动做类型转换;但匹配字符串时,引号是必须的,避免awk把它当成变量处理。
内容的提问来源于stack exchange,提问作者Somonnoy
相关产品推荐
相关产品推荐

