2015-03-30 74 views
4

不匹配的行我仍然是新來的bash,我發現了類似的問題,但我仍然無法解決我的問題。我有兩個文件,每個文件有兩列,用空格分開。找到兩個文件bash

文件1:

1 AGCATTTTTCAAACGAAAGATTTACTACCGATGTGT 
2 TGCTCACCAACAAAAACAGGCGTCTCAGCAGCAGCA 
3 GATCGAACCGGCTGCCTACTGCGTGTAAAGCCGCCC 
4 CCGACACAGAGAACATTAGAATACTCAGAGCCATNN 
5 TAAGCCTGAGCCTAAACCTAAGCCTAAACATAAGAA 
6 AGCAGAGAAGAGATGAGTTGTCGAGTGAGGCGTAAG 
7 AACGTTGAAAAATTATCCCGTCAACAGTCTCCAGAA 
8 GCCAGAGAGTAAAATATTGGGTGAAGCCAGAGAGTA 
9 TGCTCACCAACAAAAACAGGCGTCTCAGCAGCAGCA 

文件2:

1 AGCATTTTTCAAACGAAAGATTTACTACCGATGTGT 
2 TGCTCACCAACAAAAACAGGCGTCTCAGCAGCAGCA 
3 NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN 
4 CCGACACAGAGAACATTAGAATACTCAGAGCCATNN 
5 TAAGCCTGAGCCTAAACCTAAGCCTAAACATAAGAA 
6 NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN 
7 NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN 
8 GCCAGAGAGTAAAATATTGGGTGAAGCCAGAGAGTA 
9 NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN 

我想僅每個文件的第二列,逐行,和輸出第三文件僅與比較不匹配的行。

輸出:

3 NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN 
6 NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN 
7 NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN 
9 NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN 

回答

5

您可以使用awk

awk 'NR==FNR{a[$2];next} !($2 in a)' file1 file2 
3 NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN 
6 NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN 
7 NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN 
9 NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN 

說明:

NR == FNR {     # While processing the first file 
    a[$2]      # just push the second field in an array 
    next      # move to next record of first file 
} 
!($2 in a)     # print lines from file2 if array a doesn't that line 
1

您可以使用diff這一點。 diff將在兩個文件中打印出差異。

/test>diff file1 file2 
3c3 
< 3 GATCGAACCGGCTGCCTACTGCGTGTAAAGCCGCCC 
--- 
> 3 NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN 
6,7c6,7 
< 6 AGCAGAGAAGAGATGAGTTGTCGAGTGAGGCGTAAG 
< 7 AACGTTGAAAAATTATCCCGTCAACAGTCTCCAGAA 
--- 
> 6 NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN 
> 7 NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN 
9c9 
< 9 TGCTCACCAACAAAAACAGGCGTCTCAGCAGCAGCA 
--- 
> 9 NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN 

Grepping從第二個文件只是區別:

/test>diff file1 file2 | grep ">" 
> 3 NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN 
> 6 NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN 
> 7 NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN 
> 9 NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN 
+0

如果文件很大,這是最好的,也許用'--suppress常見-lines' – Kuzeko 2017-03-08 21:44:27

3
grep -vf file1 file2 

輸出:

 
3 NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN 
6 NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN 
7 NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN 
9 NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN 
+0

真是太好了! – higuaro 2015-03-30 19:41:08

+0

我認爲OP只想比較兩個文件中的第二個字段,但在這種情況下,這可能與提供的數據一起使用, – anubhava 2015-03-30 19:59:30

+0

是的。這是有效的,因爲每一行都是唯一的,並且這兩個文件都以相同的方式排序。 – Cyrus 2015-03-30 21:38:12

相關問題