You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在bash中删除CSV文件内与另一文件第一列完全匹配的行?

实现方案

优先推荐awk方案(效率最高、匹配最准确)

直接执行以下命令即可得到符合要求的结果:

awk 'NR==FNR {del[$0]; next} !($1 in del)' B A

命令解释:

  • NR==FNR {del[$0]; next}:处理第一个输入文件(此处是B)时,将文件B的每一行内容作为键存入名为del的哈希数组,处理完B后跳过后续逻辑
  • !($1 in del):处理第二个输入文件(此处是A)时,仅当行的第一列不存在于del数组中时才打印该行,保证是完全匹配第一列,不会出现前缀误删的问题

直接修改原文件A的方法:

如果使用的是gawk 4.1及以上版本,可以直接原地修改文件:

awk -i inplace 'NR==FNR {del[$0]; next} !($1 in del)' B A

如果版本不支持,通过临时文件过渡即可:

awk 'NR==FNR {del[$0]; next} !($1 in del)' B A > A.tmp && mv A.tmp A

适配逗号分隔CSV的调整:

如果你的CSV文件是逗号作为分隔符,只需添加-F','参数指定字段分隔符即可:

awk -F',' 'NR==FNR {del[$0]; next} !($1 in del)' B A

可选grep方案(仅适用于第一列无特殊字符场景)

如果第一列内容仅由字母、数字、下划线组成,也可以用grep实现:

grep -v -w -F -f B A

参数说明:

  • -v:输出不匹配的行
  • -w:按单词匹配,避免前缀误匹配
  • -F:将模式当作普通字符串,不解析正则
  • -f B:从文件B读取匹配模式

内容的提问来源于stack exchange,提问作者Johan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 05:15:03