2017-02-17 166 views
0

我有兩個文件file1.txt和file2.txt。比較兩個文件並在匹配後用一些行打印匹配行

FILE1.TXT

DS496218 40654 42783 
DS496218 40654 42783 
DS496218 40654 42783 

FILE2.TXT

### 
DS496108 ena gene 99942 102567 . -  
DS496128 ena mRNA 99942 102567 . -  
DS496118 ena three_prime_UTR 99942 100571 
### 
DS496218 ena gene 40654 42783 . -  
DS496108 ena mRNA 99942 102567 . -  
DS496108 ena three_prime_UTR 99942 100571  
### 
DS496128 ena gene 99942 102567 . -  
DS496133 ena mRNA 99942 102567 . -  
DS496139 ena three_prime_UTR 99942 100571 
### 

我想匹配用1,4-柱和FILE2.TXT第5列1,2和FILE1.TXT的3。如果匹配,則打印匹配行,直到###,但不打印###。我在

awk -F'\t' 'NR==FNR{c[$1$2$3]++;next};c[$1$4$5] > 0' file1.txt file2.txt > out.txt. 
+0

嘗試使用「中」選項。即:$ 1 $ 4 $ 5在c {do stuff here} – grail

+1

用'awk'嘗試NR == FNR {c [$ 1 $ 2 $ 3] ++;下一步} $ 1 $ 4 $ 5在c'file1.txt RS =「###」file2.txt' –

+1

[編輯]你的問題包括給定輸入的預期輸出。 @JoseRicardoBustosM。否,不要連接字段來創建密鑰字符串,除非您有一個非常具體的目標,因爲這會產生錯誤的匹配 - 請考慮'a bc' - >'abc'和'ab c' - >'abc'。同時將RS設置爲多個字符會使腳本不必要地特定於gawk,並且會在匹配之前以及之後打印行。 –

回答

0

使用「awk」命令試了一下沒有看到你預期的輸出是一個猜測,但它聽起來像這是你想要的東西:

awk ' 
NR==FNR { a[$1,$2,$3]; next } 
($1,$4,$5) in a { found=1 } 
/^###/ { found=0 } 
found 
' file1 file2 
+1

它的工作。謝謝 –

相關問題