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

如何扩展双文本文件未匹配字符串查询:从第1列到第6列(分隔符||o||)

嘿,这事儿好办!咱们直接用常用的文本处理工具就能搞定,我给你两种靠谱的方案,你可以根据自己的习惯选:

方案1:用awk(无需提前排序,更灵活)

awk处理自定义分隔符和列匹配简直是拿手好戏,直接一行命令就能搞定:

awk -F'\\|\\|o\\|\\|' 'NR==FNR {keys[$6]; next} !($6 in keys)' 参考文件.txt 待检查文件.txt

我给你拆解下每个部分的作用:

  • -F'\\|\\|o\\|\\|':因为|是正则里的特殊字符,所以得用双反斜杠转义,这样awk才会把||o||当成真正的列分隔符
  • NR==FNR {keys[$6]; next}:这部分是处理第一个输入文件(也就是你用来对比的参考文件),把每一行的第6列值存到一个叫keys的数组里,存完就跳过后面的逻辑处理下一行
  • !($6 in keys):处理第二个文件(你要找未匹配行的左侧文件)时,检查当前行的第6列是不是不在keys数组里,如果不在,就输出这一行——这就是你要的未匹配内容

方案2:用join(适合需要排序输出的场景)

如果你习惯用join命令,记得join要求输入文件是按匹配列排好序的,所以我们可以结合sort一起用:

# 直接用管道生成排序后的内容,不用临时文件
join -t'||o||' -v1 -1 6 -2 6 <(sort -t'||o||' -k6,6 待检查文件.txt) <(sort -t'||o||' -k6,6 参考文件.txt)

解释下关键参数:

  • -t'||o||':指定列分隔符为||o||
  • -v1:只输出第一个文件(待检查的左侧文件)中没有匹配上的行
  • -1 6:告诉join用第一个文件的第6列作为匹配键
  • -2 6:用第二个文件的第6列作为匹配键
  • <(...):这是bash的进程替换特性,直接把sort的输出当成临时文件给join用,省得手动生成排序后的文件

小提醒

  • 如果你的文件里第6列有空值或者特殊字符,这两个方案都能正常工作,因为都是严格按分隔符拆分列的
  • 记得把命令里的参考文件.txt和待检查文件.txt换成你实际的文件名哦

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:16:39