首页 > 解决方案 > 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 来做到这一点?谢谢!

标签: shellawk

解决方案


您可以使用:

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。


推荐阅读