找到两个文件bash的不匹配行

时间:2015-03-30 19:18:29

标签: 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

3 个答案:

答案 0 :(得分:6)

您可以使用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 :(得分:3)

grep -vf file1 file2

输出:

3 NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
6 NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
7 NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
9 NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN

答案 2 :(得分:1)

您可以使用diffdiff将打印出两个文件中的差异。

/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

从第二个文件中获取差异:

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