如何从文件中提取大于阈值的值?

如何从文件中提取大于阈值的值?

我有这个文件:

names average
john:15.02
Mark:09.63
James:12.58

我只想从中提取大于 10 的平均值,因此此示例中的输出应该是:

15.02
12.58

答案1

awk

awk -F: '{if($2>10)print$2}' <filename

解释

  • -F:– 将F字段分隔符设置为:
  • {if($2>10)print$2}– 对于每一行,测试2nd 字段是否为>10,如果是,print
  • <filename– 让 shell 打开文件filename,这比让awk这样做要好,见Stéphane Chazelas 对这个话题的回答

示例运行

$ <filename awk -F: '{if($2>10)print$2}'
15.02
12.58

也可以添加空格并将模式放在括号外面,这样它们就相等了——这要归功于斯蒂芬指出这一点:

awk -F: '{if($2>10)print$2}' <filename
awk -F: '{ if ( $2 > 10 ) print $2 }' <filename
awk -F: '$2>10{print$2}' <filename
awk -F: '$2 > 10 { print $2 }' <filename

答案2

使用 grep 时,你必须使用正则表达式;例如

grep -E ':[^0-9]*[1-9][0-9][0-9]*\.' file | cut -d':' -f2

与 sed 一样:

sed -n 's/.*:[^0-9]*\([1-9][0-9][0-9]*\..*\)/\1/p' file

但是在有序数据上使用 RegEx 容易出错(根据我的经验)并且难以阅读 ;-)。

答案3

我也发布了这个解决方案

sed '1d' File|cut -d: -f2 |awk '$0>10' 

sed '1d'= 删除标题

cut -d: -f2= 保留分隔符后的值(在本例中为:)

awk '$0>10'= 打印所有大于 10 的值

相关内容