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

时间:2018-05-17 17:00:10

标签: unique text-processing comm

我有两个非常大的文件(文件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.1检查AT1G01010时,它不会显示任何常见内容。

2 个答案:

答案 0 :(得分:2)

尝试:

grep -Fvf file2 file1

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

答案 1 :(得分:0)

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-