比较2个文件并提取不同的行

时间:2017-02-28 09:58:06

标签: python r awk comparison

我有2个文件,例如:

文件1:

1 azer 4
2 toto 0
3 blabla 8
4 riri 9
5 coco 2

文件2:

1 azer 4
2 toto 0
3 blabla 8

我想比较两个文件,如果文件2中的行在文件1中,我想从文件中删除这些行1.例如:

输出:

4 riri 9
5 coco 2

我试过这个命令,但它只显示了相似之处:

awk 'NR==FNR{a[$2];next} $1 in a {print $0}' merge genotype.txt

有人知道怎么做吗?我在awk中试过但是如果可以在R或python中做到这一点也很好。

3 个答案:

答案 0 :(得分:1)

首先,将文件2行读作class,因此测试速度更快。然后迭代文件1的行并使用生成器理解来编写输出文件行。

set
  • 保留订单
  • 快速测试
  • 文件1永远不会在内存中完全读取,但是迭代器链逐行读/写文件

答案 1 :(得分:1)

grep -

中更简单的解决方案
$cat file1
1 azer 4
2 toto 0
3 blabla 8
4 riri 9
5 coco 2

$cat file2
1 azer 4
2 toto 0
3 blabla 8

尝试 -

grep -vf file2 file1

输出 -

4 riri 9
5 coco 2

答案 2 :(得分:0)

# awk
awk 'FNR==NR{a[$0];next}!($0 in a)' file2 file1

# comm
comm -23 file1 file2

# grep 
grep -Fvxf file2 file1

<强>输入

$ cat file1
1 azer 4
2 toto 0
3 blabla 8
4 riri 9
5 coco 2

$ cat file2
1 azer 4
2 toto 0
3 blabla 8

<强>输出

$ awk 'FNR==NR{a[$0];next}!($0 in a)' file2 file1
4 riri 9
5 coco 2

$ comm -23 file1 file2
4 riri 9
5 coco 2

$ grep -Fvxf file2 file1
4 riri 9
5 coco 2