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}
– 对于每一行,测试2
nd 字段是否为>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 容易出错(以我的经验)并且难以阅读;-)。