如何使用Bash脚本按唯一字符串累加其对应的数值?
解决方法
你可以直接在原有提取逻辑的基础上借助awk完成分组累加,无需额外复杂逻辑:
一行命令版本(直接追加到原有管道后即可)
cat file.txt | cut -d " " -f 1,3 | awk '{sum[$1] += $2} END {for (key in sum) print key, sum[key]}' | sort
逻辑说明
- 关联数组
sum以提取的字符串为键,对应累加值为值 - 逐行读取时将当前行的整数累加到对应字符串的计数中
- 全部处理完成后遍历输出所有唯一字符串和对应的累加总和
- 末尾追加
sort可以按字符串顺序输出结果,不需要排序可以去掉这部分
独立Bash脚本版本
如果需要封装为可复用脚本,可新建sum_by_string.sh写入以下内容:
#!/bin/bash if [ $# -ne 1 ]; then echo "用法: $0 <待处理文件路径>" exit 1 fi target_file="$1" # 执行提取+累加统计逻辑 cut -d " " -f 1,3 "$target_file" | awk '{ sum[$1] += $2 } END { for (str in sum) { printf "%s %d\n", str, sum[str] } }' | sort
使用方法
- 给脚本添加执行权限:
chmod +x sum_by_string.sh - 运行脚本传入待处理文件即可:
./sum_by_string.sh file.txt
示例输出
针对你给出的样例数据,最终输出结果为:
red 25 white 59 yellow 22
内容的提问来源于stack exchange,提问作者deryck123
相关产品推荐
相关产品推荐

