【问题标题】:GAWK Syntax IssueGAWK 语法问题
【发布时间】:2021-05-11 11:35:20
【问题描述】:

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

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 的右括号语法错误也应该捕获它。
  • @karakfa 它给了我:gawk:cmd。 line:1: 然后在打印行 ^ 语法错误
  • ^ 应该指向错误位置。
  • @karakfa 是的,它指向打印开始

标签: awk


【解决方案1】:

实际问题是由 if 语句中第二个条件的虚假开头( 引起的。

正如人们在上面的 cmets 中已经指出的那样:

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

因此,您自己的调用需要看起来像 this

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

【讨论】:

  • 从技术上讲,遗留兼容性确实允许使用奇怪的语法,例如 if (something) just-do-it-no-brackets。 OP 错误不是在 { } 上而是在忘记关闭 if 条件的第二个 ) 上。那说。对于 awk 来说,这是非常尴尬的符号,因为它与 C/C++ 的近亲比与 python 语法更接近。
  • @RAREKpopManifesto - 哎呀;你说得对。修改了我的答案。
  • 感谢@tink 的帮助
猜你喜欢
  • 1970-01-01
  • 2013-02-03
  • 1970-01-01
  • 2011-05-17
  • 1970-01-01
  • 1970-01-01
  • 2011-05-15
  • 2011-09-21
相关资源
最近更新 更多