多文件<string>,<number>内容排序求和:后续处理命令咨询
解决方法:汇总相同字符串的数字总和
看来你已经完成了合并所有文件内容和排序的前置步骤,接下来只需要简单几步处理,就能实现按字符串汇总对应数字总和的需求啦:
完整命令链
cat * | sort | tr ' ' '\n' | awk -F ',' '{sum[$1] += $2} END {for (key in sum) print key "," sum[key]}'
分步解释
tr ' ' '\n':你的原始内容是用空格分隔每个<string>,<number>条目(比如a,5 b,2),这个命令会把所有空格替换成换行符,让每个条目单独占一行,方便后续工具处理。awk -F ',' '{sum[$1] += $2}':以逗号作为字段分隔符,把每个条目的第一个字段(字符串部分)作为键,第二个字段(数字部分)累加进sum数组中,自动完成相同字符串的数字求和。END {for (key in sum) print key "," sum[key]}:当awk处理完所有行后,遍历sum数组,严格按照<string>,<所有数字之和>的格式输出每一组结果。
可选优化:让输出按字符串排序
如果希望最终输出和你示例一样按字符串顺序排列,可以在命令末尾再加一个sort:
cat * | sort | tr ' ' '\n' | awk -F ',' '{sum[$1] += $2} END {for (key in sum) print key "," sum[key]}' | sort
要是你偏好把结果变回空格分隔的格式(和输入样式一致),可以在最后追加tr '\n' ' ',不过通常每行一个条目会更易读。
内容的提问来源于stack exchange,提问作者TTaJTa4
相关产品推荐
相关产品推荐

