请教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
请教怎么解决?
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
请问 一下! 在你第一列中没有的数字,你问什么还要加入啊!
我这写了个第一列没有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
回复 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
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28