首页 > 解决方案 > GAWK 语法问题

问题描述

有人可以帮我解决这个语法问题吗?

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

看起来我在打印输出时收到了语法错误。

标签: awk

解决方案


实际问题是由(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}'

另一条评论:如果您发现自己使用cat单个文件名,您很可能做错了。所以,更好的选择是:

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

推荐阅读