1

我有一个文件,看起来像:

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。最好的方法是什么?

4

3 回答 3

5

这使得它:

$ 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变量中,最后打印出来。最后它打印平均值,除以sumNR它具有处理的行数的值。

于 2013-09-17T14:18:51.837 回答
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
于 2013-09-17T14:34:12.987 回答
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
于 2013-09-17T14:20:42.573 回答