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

如何在Bash中对两个文件的行执行忽略位置的集合差运算?

Bash实现行级集合差运算

完全可以轻松实现,下面分两种常用场景给出具体命令:

方案一:允许先排序(推荐,效率更高)

用系统自带的comm命令,它专门处理已排序的文件,默认输出三列内容:仅第一个文件有的行、仅第二个文件有的行、两个文件共有的行。通过参数可以只保留需要的列:

  • 获取file1有但file2没有的行:

    comm -23 <(sort file1) <(sort file2)
    

    (-23表示抑制第二列(仅file2的行)和第三列(共有的行),只保留第一列)

  • 获取file2有但file1没有的行:

    comm -13 <(sort file1) <(sort file2)
    

    (-13表示抑制第一列和第三列,只保留第二列)

如果需要严格符合集合元素唯一性(去重),可以在排序时加-u参数:

comm -23 <(sort -u file1) <(sort -u file2)

方案二:不需要排序(保留原行顺序)

用grep命令实现,无需提前排序,直接按原文件行顺序输出结果:

  • 获取file1有但file2没有的行:

    grep -vFxf file2 file1
    
  • 获取file2有但file1没有的行:

    grep -vFxf file1 file2
    

参数说明:

  • -v:反向匹配,输出不匹配的行
  • -F:将每行当作固定字符串处理,避免正则表达式符号干扰
  • -x:要求整行完全匹配,避免部分匹配的情况
  • -f:从指定文件中读取每行作为匹配模式

示例验证

假设file1内容(每行一个元素):

a
b
c
d
f
g

file2内容:

a
b
c
e
g
h
  • 执行comm -23 <(sort file1) <(sort file2),输出:
    d
    f
    
  • 执行comm -13 <(sort file1) <(sort file2),输出:
    e
    h
    
  • 执行grep -vFxf file2 file1,输出(保留原顺序):
    d
    f
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 02:45:38