我有一个文件,看起来像:
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。最好的方法是什么?
答案 0 :(得分:4)
这就是:
$ 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
,其中包含已处理行数的值。
答案 1 :(得分:4)
我会这样做:
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
答案 2 :(得分:2)
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