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

Hai*_*ani 15 command-line text-processing

我有这个文件:

names average
john:15.02
Mark:09.63
James:12.58
Run Code Online (Sandbox Code Playgroud)

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

15.02
12.58
Run Code Online (Sandbox Code Playgroud)

des*_*ert 25

awk

awk -F: '{if($2>10)print$2}' <filename
Run Code Online (Sandbox Code Playgroud)

说明

  • -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
Run Code Online (Sandbox Code Playgroud)

也可以添加空格并将模式放在括号外,所以它们是相等的——感谢Stefan指出:

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
Run Code Online (Sandbox Code Playgroud)


小智 5

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

grep -E ':[^0-9]*[1-9][0-9][0-9]*\.' file | cut -d':' -f2
Run Code Online (Sandbox Code Playgroud)

与 sed 一样:

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

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