【问题标题】:Using awk to sum the values of a column, based on the values of another column使用 awk 根据另一列的值对列的值求和
【发布时间】:2019-03-07 01:07:59
【问题描述】:

我正在尝试使用awk 对列中的某些数字求和。我想将第二列中的数字与具有相同 IP 地址的彼此相加。

2001:778:0:1::21 44
2001:778:0:1::21 1406
2001:778:0:1::21 66643
88.222.10.7 66643
88.222.10.7 1406
88.222.10.7 -
88.222.10.7 66643
88.222.10.7 1406
121.141.172.40 235
121.141.172.40 235

期望的输出:

2001:778:0:1::21 68093
88.222.10.7 136098
121.141.172.40 470

【问题讨论】:

  • 欢迎来到 SO,特别感谢您在 CODE TAGS 中添加示例输入和输出,因此,我们鼓励用户将他们的努力连同他们的问题示例一起添加,因此请添加您的努力为了在您的帖子中解决您的问题,在这个伟大的网站上欢呼并快乐学习。
  • 对于非 awk 方式,查找 datamash。

标签: shell unix awk


【解决方案1】:

第一个解决方案:您能否尝试以下操作。(如果您不关心输出中第一个字段的顺序)

awk '{a[$1]+=$NF} END{for(i in a){print i,a[i]}}'  Input_file

第二个解决方案:如果您想保持第一个字段的顺序与 Input_file 的顺序相同,请尝试以下操作。

awk '!b[$1]++{c[++count]=$1} {a[$1]+=$NF} END{for(i=1;i<=count;i++){print c[i],a[c[i]]}}'  Input_file

【讨论】:

  • 它有效,谢谢!还有一个问题.. 在不使用 awk 的情况下完成这项任务的最佳方法是什么?
  • @EdgarasAlšauskas,恕我直言,我们也可以在 shell 中执行此操作,但老实说,我认为使用 awk 或任何其他语言执行此操作会更有效。
  • 非常感谢您的回答!
  • 哇,哇,哇。一口气工作!
  • @Mamun,欢迎您,干杯。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-16
  • 2011-01-19
  • 2018-01-07
  • 1970-01-01
  • 1970-01-01
  • 2011-07-22
  • 1970-01-01
相关资源
最近更新 更多