1

我有两个非常大的文件(文件 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

comm在 Ubuntu 中尝试过命令,但它没有工作,因为它检查了完整的模式。所以当它试图检查它AT1G01010.1AT1G01010不会显示任何常见的东西。

4

2 回答 2

4

尝试:

grep -Fvf file2 file1

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

于 2018-05-17T17:37:25.757 回答
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-
于 2018-05-17T19:19:22.183 回答