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

Bash脚本中对比|分隔CSV文件,生成匹配与非匹配结果文件

问题:按指定列匹配|分隔的CSV文件并拆分结果

我有两个以|为分隔符的CSV文件,需要在Bash脚本中处理:

  • File A包含5列(示例中显示为4列,可按需调整列索引),无表头
  • File B包含1列,无表头

需求:

  • 生成File C:保存File A中目标列与File B第1列匹配的完整行
  • 生成File D:保存File A中不匹配的完整行

示例文件

File A内容

CT240021313|2024-02-04 00:00:02|CT|1.2.345.6
 AB123|2024-02-01 11:22:33|MR|7.8.98.102
 PDQ987|2024-02-04 8:50:11|XR|1.23.45.6
 PA7531|2024-02-03 9:34:52|CT|6.3.489

File B内容

1.2.345.6
6.3.489

期望输出

File C(匹配行)

CT240021313|2024-02-04 00:00:02|CT|1.2.345.6
PA7531|2024-02-03 9:34:52|CT|6.3.489

File D(不匹配行)

AB123|2024-02-01 11:22:33|MR|7.8.98.102
 PDQ987|2024-02-04 8:50:11|XR|1.23.45.6

当前错误命令

awk 'NR==FNR{a[$0];next !($0 in a)' file_a.csv file_b.csv  > file_c.csv

解决方案

你的命令存在三个问题:未指定分隔符、处理文件顺序错误、语法缺失闭合括号。以下是修正后的命令,可一次性生成两个目标文件:

awk -F'|' 'NR==FNR{a[$0]; next} {if ($4 in a) print > "file_c.csv"; else print > "file_d.csv"}' file_b.csv file_a.csv

命令说明

  • -F'|':指定字段分隔符为|,确保正确拆分CSV列
  • NR==FNR{a[$0]; next}:先处理File B,将所有匹配项存入数组a,然后跳过后续逻辑
  • 处理File A时:判断第4列(若实际为5列,替换为$5)是否在数组a中,匹配写入file_c.csv,不匹配写入file_d.csv

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 17:17:34