使用AWK处理CSV文件:按第5列去重保留首次出现行的代码修复
错误原因
你编写的代码存在两处问题:
- 多余的
NF--语句:NF是awk的内置变量,代表当前行的字段总数,执行NF--会直接删除每行的最后一列(也就是你用来去重的第5列Translation),导致输出内容不符合预期。 - 未单独处理表头行:虽然本次场景下表头的第5列取值不会和数据行重复,但通用场景下单独处理表头可以避免特殊内容触发异常逻辑。
修正后代码
awk 'BEGIN{FS=OFS=","} NR==1{print; next} !h[$5]++' infile.csv > outfile.csv
逻辑说明
BEGIN{FS=OFS=","}:预先设置输入、输出的字段分隔符均为逗号,逻辑更规范清晰NR==1{print; next}:识别到第一行表头时直接输出,跳过后续去重判断!h[$5]++:基于哈希表的去重逻辑,只有第5列第一次出现时才会输出对应行,完全匹配你的去重需求,最终输出和你给出的预期结果一致。
内容的提问来源于stack exchange,提问作者user3925736
相关产品推荐
相关产品推荐

