使用AWK编辑CSV文件:按第二字段分组求和第一字段的命令修复
问题原因
你写的原有awk命令存在两个核心问题:
- 语法错误:括号、单引号位置不匹配,循环逻辑无实际意义
- 逻辑完全偏离需求:原有代码尝试逐行比较相邻字段相等性,没有实现「按第二列字符序列分组、累加对应第一列数值」的核心需求
修正后命令
基础版本(输出顺序为字典序)
awk -F ',' '{sum[$2] += $1} END{for(key in sum) print sum[key] "," key}' infile.csv > outfile.csv
保序版本(输出顺序和第二列首次出现的顺序一致)
如果需要保留原文件中第二列首次出现的先后顺序,用以下命令:
awk -F ',' '!($2 in sum){order[++n]=$2} {sum[$2] += $1} END{for(i=1;i<=n;i++) print sum[order[i]] "," order[i]}' infile.csv > outfile.csv
命令逻辑说明
- 用关联数组
sum,以第二列字符序列为键,累加对应行第一列的数值 - 保序版本额外用
order数组记录第二列首次出现的顺序,最终遍历输出时按该顺序打印
内容的提问来源于stack exchange,提问作者bzmby
相关产品推荐
相关产品推荐

