请教shell求和方法

发布于 2022-10-15 09:21:52 字数 359 浏览 24 评论 0

有一个文件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

请教怎么解决?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

山有枢 2022-10-22 09:21:52

回复 1# 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

笔芯 2022-10-22 09:21:52

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

回复 2# 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

抱着落日 2022-10-22 09:21:52

回复  db2-zhang

    因为统计数据中需要10的数据,可能在某一天里却没有这个10的数据.所以要填成0.
...
lvyuancyx 发表于 2011-04-17 17:51

$ echo '1 10
3 20
1 50
5 20
20 46
5  40' | perl -lane 'BEGIN{$h{$_}=0 for(1,3,5,10,20)}{$h{$F[0]}+=$F[1]}END{for(sort{$a<=>$b}keys %h){print "$_\t$h{$_}"}}'
1        60
3        20
5        60
10        0
20        46

风轻花落早 2022-10-22 09:21:52

本帖最后由 jason680 于 2011-04-18 11:10 编辑

只用awk的来实现,难真累人....
$ echo '1 10
3 20
1 50
5 20
20 46
5 40 ' |awk 'BEGIN{a["01"]=a["03"]=a["05"]=a[10]=a[20]=0}
{a[sprintf("%02s",$1)]+=$2}
END{n=asorti(a,s);for(t=1;t<=n;t++)printf("%d\t%s\n",s[t],a[s[t]])}'
1        60
3        20
5        60
10        0
20        46

墨落成白 2022-10-22 09:21:52
  1. awk '{a[$1]+=$2;b[$1]=$1;}END{x=asort(b);for(i=1;i<=x;i++)print b[i],a[b[i]]}'

复制代码

请持续率性 2022-10-22 09:21:52

回复 1# lvyuancyx

  1. echo "1 10
  2. 3 20
  3. 1 50
  4. 5 20
  5. 20 46
  6. 5  40" |awk 'NF==2{a[$1]+=$2;next}{print $1,a[$1]?a[$1]:"0"}' - <(echo "1
  7. 3
  8. 5
  9. 10
  10. 20")
  11. 1 60
  12. 3 20
  13. 5 60
  14. 10 0
  15. 20 46

复制代码

唐婉 2022-10-22 09:21:52

这个就应该用蛮力解决,别为了一个特殊情况考虑算法
,直接把第一列必须有的数字追加到文件里,
然后就是求和了

捶死心动 2022-10-22 09:21:52

同意楼上的...

笑看君怀她人 2022-10-22 09:21:52

学习学习!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文