+ -
当前位置:首页 → 问答吧 → 请教shell求和方法

请教shell求和方法

时间:2011-04-17

来源:互联网

有一个文件cat abc
1 10
3 20
1 50
5 20
20 46
5  40


想实现这样的功能:
第一列按照1 3 5 10 20 排序,第二列进行求和.
如果第一列的值不存在,则第二列补充为0.
即最后想要的的结果是:

1 60
3 20
5 60
10 0
20 46

请教怎么解决?

作者: lvyuancyx   发布时间: 2011-04-17

回复 lvyuancyx


    请问 一下! 在你第一列中没有的数字,你问什么还要加入啊!

  我这写了个第一列没有10的:

echo '1 10
3 20
1 50
5 20
20 46
5  40'|awk '{a[$1]+=$2}END{for(i in a)print i"\t"a}'|sort -n -k 1
1       60
3       20
5       60
20      46

作者: db2-zhang   发布时间: 2011-04-17

本帖最后由 lvyuancyx 于 2011-04-17 18:04 编辑

回复 db2-zhang


    因为统计数据中需要10的数据,可能在某一天里却没有这个10的数据.所以要填成0.

我写了一个但是不够精简,所以想求更好的方法

for val in 1 3 5 10 20
do
awk '{print $1}' abc |grep -w $val >/dev/null 2>&1
if [ $? -eq 0 ];then
awk -v vv=$val  '{if($1==vv){a[$1]+=$2}}END{for(i in a) print i,a}' abc
else
echo $val 0
fi
done

作者: lvyuancyx   发布时间: 2011-04-17