awk - 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
看起来我在打印输出时收到了语法错误。
解决方案
实际问题是由(
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
推荐阅读
- mysql - SequelizeAccessDeniedError:用户'root'@'172.19.0.1'的访问被拒绝
- php - 使用数组内爆函数来命名 MySQL 数据库中的列
- jquery - 在jQuery函数完全加载之前添加加载
- python - 无法安装 pytorch - ModuleNotFoundError:没有名为“tools.nnwrap”的模块
- javascript - 在 useState 钩子中反应设置状态
- reactjs - 如何使用 Jest 测试 useParam() 函数
- java - 用 jar 文件打开 Cmd 并执行程序
- audio - 用 arecord 录制 4 个通道有什么特别的注意事项吗?
- docker - 从一个 docker 容器无密码登录到另一个
- firebase - 在 Firebase 中更改登录方法