shell - 使用 awk 根据另一列的值对列的值求和
问题描述
我正在尝试使用 总结列中的某些数字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
解决方案
第一个解决方案:您能否尝试以下操作。(如果您不关心输出中第一个字段的序列)
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
推荐阅读
- android - 无法显示自定义 Recylerview 数据的总和
- cocoa - 以编程方式更改 macOS Mojave 强调色
- python - 如何找到使用 ssh 和 rsync 的方法
- c++ - 不知何故告诉编译器“不要处理代码行”
- java - 使用 SharedPreferences 创建多个用户
- r - 从嵌套循环返回完整列表
- mongodb - MongoDB 对大型多更新操作的可扩展性问题
- python - 将 python WeakSet 提供给列表构造函数是否安全?
- c - 如何打印出每个目录但作为路径名?(在身体描述中解释)
- spring - spring boot rest webservice,如何改进干净的代码?