簡體   English   中英

找到兩個文件bash的不匹配行

[英]find non-matching lines of two files bash

我仍然是bash的新手,我發現了與我相似的問題,但我仍然無法解決我的問題。 我有兩個文件,每個文件有2列,用空格分隔。

檔案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

你可以使用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
grep -vf file1 file2

輸出:

3 NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
6 NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
7 NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
9 NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN

您可以使用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

從第二個文件中獲取差異:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM