查找两个文件之间的唯一行

Find unique lines between two files

我有两个非常大的文件(文件 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 检查 AT1G01010.1 时,它没有显示任何共同点。

尝试:

grep -Fvf file2 file1

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

grep 为最佳答案。

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

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

适用于 GNU awk。

join

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