GAWK语法问题

GAWK语法问题,awk,Awk,有人能帮我解决这个语法问题吗 bash-4.2$cat-test_-gawk | gawk-F,{if($1~/STOP/&($21~/722/)print$21,“$34,“$31,“$64}”| sort-n | uniq-c | sort-n 在打印输出时,我似乎收到了语法错误。实际问题是由于if语句中第二个条件的错误打开() 正如人们在上述评论中已经指出的那样: 在awk中,if语句的形式通常是if(){} 因此,您自己的调用需要如下所示: gawk -F, '{if($1 ~/STO

有人能帮我解决这个语法问题吗

bash-4.2$cat-test_-gawk | gawk-F,{if($1~/STOP/&($21~/722/)print$21,“$34,“$31,“$64}”| sort-n | uniq-c | sort-n

在打印输出时,我似乎收到了语法错误。

实际问题是由于if语句中第二个条件的错误打开

正如人们在上述评论中已经指出的那样:

在awk中,if语句的形式通常是
if(){}

因此,您自己的调用需要如下所示:

gawk -F, '{if($1 ~/STOP/ && $21 ~ /722/){print $21, " "$34, " "$31, " "$64}}'
gawk -F, '{if($1 ~/STOP/ && $21 ~ /722/) print $21, " "$34, " "$31, " "$64}'
不是这个

gawk -F, '{if($1 ~/STOP/ && $21 ~ /722/){print $21, " "$34, " "$31, " "$64}}'
gawk -F, '{if($1 ~/STOP/ && $21 ~ /722/) print $21, " "$34, " "$31, " "$64}'
另一条评论是:如果您发现自己将
cat
与一个文件名一起使用,则很可能是错误的。因此,更好的选择是:

gawk -F, '{if($1 ~/STOP/ && ($21 ~ /722/){print $21, " "$34, " "$31, " "$64}}' test_gawk | sort -n | uniq -c | sort -n

缺少
的右括号,如果
语法错误也应该捕获它。@karakfa它给了我:gawk:cmd.line:1:然后在打印行上,^Syntax error
^
应该指向错误位置。@karakfa是的,它指向打印开始时,用
{…}
括住
打印部分,即
{print$21,“$34,”$31,“$64}
。此外,请尝试删除
$21~/722/
前面)。从技术上讲,旧式兼容性允许使用奇怪的语法,如if(something)doit it no方括号。操作错误不在{}上出现,而是在忘记关闭第二个时出现)对于if条件。也就是说。对于awk来说,看到它更接近C/C++而不是python语法,这是非常尴尬的symtax。@RAREKpopManifesto-oops;你说得很对。修改了我的答案。谢谢你的帮助@tink