【问题标题】:Find unique lines between two files查找两个文件之间的唯一行
【发布时间】:2018-05-17 17:00:09
【问题描述】:

我有两个非常大的文件(文件 1 和文件 2),文件 1 有很多行和列,为了简单起见,我粘贴了第 1 列。我只想打印文件 1 独有的那些行。

文件 1:

AT1G01010.1
AT1G01020_P1
AT1G01020_P2
AT1G01040.2
AT1G01040_P1
AT1G01046.1
AT1G01050_ID7

文件 2:

AT1G01010
AT1G01046
AT1G01050

输出:

AT1G01020_P1
AT1G01020_P2
AT1G01040.2
AT1G01040_P1

我在 Ubuntu 中尝试过 comm 命令,但它没有工作,因为它检查了完整的模式。因此,当它尝试检查 AT1G01010.1AT1G01010 时,它不会显示任何常见的内容。

【问题讨论】:

    标签: unique text-processing comm


    【解决方案1】:

    试试:

    grep -Fvf file2 file1
    

    这将打印与 file2 中的行不完全或部分匹配的行。

    【讨论】:

      【解决方案2】:

      grep 是最佳答案。

      使用 awk:使用非字母数字字符作为字段分隔符,记住文件 2 的内容,如果在 file2 中没有看到 file1 的第一个字段,则打印该行。

      gawk -F '[^[:alnum:]]' 'NR==FNR {f2[$1]; next} !($1 in f2)' file2 file1
      

      适用于 GNU awk。

      join

      join -v1 <(sed 's/^[[:alnum:]]\+/& &/' file1 | sort -k 1,1) <(sort file2) | cut -d " " -f 2-
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-10-01
        • 1970-01-01
        • 2014-02-02
        • 2014-10-19
        • 1970-01-01
        • 2010-10-31
        • 1970-01-01
        相关资源
        最近更新 更多