我有一个文件,看起来像:
Lorem ipsum dolor sit amet... 2465m
id porttitor libero mauris at magna... 1m
istique pretium tincidunt. V...1200m
...
我想计算(使用 unix 命令、awk、grep 等)尾随数字的总和,我的意思是 (2465 + 1 + 1200 + ...) / NUMBER_OF_LINES。最好的方法是什么?
这使得它:
$ awk '{sum+=$NF+0} END{print "total sum is " sum " and average " sum/NR}' file
total sum is 3666 and average 1222
$NF
代表每一行的最后一个单词。它使用$NF+0
以便m
不考虑尾随和其他字符。然后它将总和保存在sum
变量中,最后打印出来。最后它打印平均值,除以sum
,NR
它具有处理的行数的值。
我会这样做:
grep -oP '\d+(?=m\s*$)' file|awk '{_+=$0}END{printf "Avg: %0.2f\n",_/NR}'
它有两个进程,grep 和 awk,但它适用于数字列/字段以非数字字符开头的情况。喜欢:
foo123 456 ffffff100m
xbar 222 444 bbbbb200m
234 df343 xxxxxx300m
在上面的例子中,它输出:
Avg: 200.00
用你的例子它输出:
Avg: 1222.00
awk '{sum+=$NF}END{printf "Average: %0.2f\n",sum/NR}' file
输入:
Lorem ipsum dolor sit amet... 2465m
id porttitor libero mauris at magna... 1m
istique pretium tincidunt. V...1200m
输出:
Average: 822.00
有些部分实际上没有空格并且不能使用,FS=" ."
所以你真的必须转换字符串。
awk '{t=$NF;gsub(/[^0-9]/,"",t);sum+=t}END{printf "Average: %0.2f\n",sum/NR}'
输出:
Average: 1222.00