我有这个文件:
names average
john:15.02
Mark:09.63
James:12.58
我只想从中提取大于10的平均值,因此此示例中的输出应为:
15.02
12.58
我有这个文件:
names average
john:15.02
Mark:09.63
James:12.58
我只想从中提取大于10的平均值,因此此示例中的输出应为:
15.02
12.58
Answers:
awkawk -F: '{if($2>10)print$2}' <filename
-F:–将F字段分隔符设置为:{if($2>10)print$2}–对于每一行,测试2nd字段是否为>10,如果print是<filename–让shell打开文件filename,这比让它打开更好awk,请参阅StéphaneChazelas关于该主题的答案$ <filename awk -F: '{if($2>10)print$2}'
15.02
12.58
也可以添加空格并将样式放在方括号之外,因此它们是相等的–感谢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
[[ $0 > 10 ]]视为词汇比较-无论如何,对于非整数值来说,它并没有多大帮助
使用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容易出错,并且难以阅读;-)。
grep ':[1-9][0-9]\+\.' <file | cut -d: -f2和sed -n 's/.*:\([1-9][0-9]\+\..*\)/\1/p' <file。值得一提的是,这仅适用于> 1,> 10,> 100等。例如,不可能使用> 20。
':[1-9][0-9]\+\.\?'-文字小数点\。是可选的,最多匹配一次\?。(@dessert感谢您指出我的RegEx的限制。)