我有这个文件:
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:
awk
awk -F: '{if($2>10)print$2}' <filename
-F:
–将F
字段分隔符设置为:
{if($2>10)print$2}
–对于每一行,测试2
nd字段是否为>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的限制。)