shell - AWK 打印大于平均值的名称和数字
问题描述
那是文件:
Alpha Beta Omega 100 95 90
One Two Three Four Five 13 24 50
Yes No 70 70 70
João Édipo Schültz 40 50 60
平均值必须设置为 70,因此三个数字 %3 必须等于/大于 70。答案(输出)应该是:
Alpha Beta Omega 100 95 90
Yes No 70 70 70
我试过用它来隔离数字,但无法删除带有~
、^
和\´
东西的字母:
awk -F"[a-zA-Z=&\"]*" '{print $2,$3,$4}'
我如何使用 AWK 来做到这一点?谢谢!
解决方案
您可以使用:
awk -v p=70 '{for (i=NF-3; i<=NF; ++i) if ($i < p) next} 1' file
Alpha Beta Omega 100 95 90
Yes No 70 70 70
if ($i < p) next
只要最后三列中的任何一列小于在命令行上p
设置的变量,这里就会跳过一条记录。70
如果要比较的数字可以在一行中的任何位置,请使用:
awk -v p=70 '{for (i=1; i<=NF; ++i) if (+$i == $i && $i < p) next} 1' file
+$i == $i
如果列是数字,则where返回 true。
推荐阅读
- compiler-construction - 编程语言只是编译器吗?
- c# - 如何在 Docker 中将文件夹路径作为运行参数传递
- optimization - 在 Anylogic 中同时运行仿真和优化
- html - 具有类的第一个元素的 CSS
- c - 孩子内部的值修改不会更新
- google-people-api - 如何从 429 恢复资源已用尽(例如检查配额)
- angular - 检查数组值是否存在于订阅 angular10
- javascript - 我使用 .off() 限制一次点击。但是当下一页按钮不起作用时
- swift - 如何在我的 Xcode Swift 项目的不同导航堆栈中从一个视图控制器屏幕切换到另一个?
- docker - 如何将 docker 卷与来自 dockerhub 的 docker 映像一起使用