2016-03-23 6 views
2

これは何度も尋ねられていますが、何らかの理由で私の解決策が機能していません。二つの.txtファイル:列を別々の.txtファイルで比較する

FILE1.TXT

I 27804 C A 0.987700768 1024 0.518987342 
I 27810 T C 0.99418488 1054 0.518987342 
I 27816 G A 0.994650485 1085 0.518987342 
I 27822 T C 0.998170732 1097 0.518987342 
I 27825 C T 0.998170732 1101 0.518987342 

FILE2.TXT

I 27804 . C A 1115.77 
I 27810 . T C 1141.77 
I 27816 . G A 1141.77 
I 27822 . T C 1141.77 
I 27823 . C A 1141.77 
I 27825 . C T 1141.77 

FILE2.TXTは、多数の列を(明確にするため図示せず)が含まれています。

File1.txtで$ 1、$ 2、$ 3、および$ 4を使用して、File2.txtの対応する行を特定し、File2.txtの完全な行を印刷したいとします。

所望の出力は次のようになります。

I 27804 . C A 1115.77 
I 27810 . T C 1141.77 
I 27816 . G A 1141.77 
I 27822 . T C 1141.77 
I 27825 . C T 1141.77 

このエントリにスキップ:

I 27823 . C A 1141.77 

それがFILE1.TXTに存在しないので。

awk 'NR==FNR{a[$1,$2,$3,$4]=$0;next}{if(b=a[$1,$2,$4,$5]){print b}}' file1.txt file2.txt 

をしかし、これはFILE1.TXT行を返すことだけでなく、表示されます - しかし、単にFILE1.TXTの全体を印刷し直し:

私は単純に使用してみました。私は何を間違えたのですか?

+1

'B = [...]'割り当てです。 'file1.txt'の行が必要ない場合は、まず' a'に格納する必要はありません。 –

答えて

1

これは動作します:

awk 'NR==FNR{a[$1$2$3$4];next}{b=$1$2$4$5;if(b in a){print}}' file1.txt file2.txt 
関連する問題