2017-11-03 1 views
0

私は、私は2番目のファイル、file2から特定の列を抽出するために使用する必要があるキーのファイル、file1、(新しいライン上の各キー)を持っています。ファイル1の長さは46行であり、file2ははるかに大きく、>20,000行です。 file1に表示されるすべてのキーがfile2に表示されるわけではなく、その逆もあります。awkを使用してキーに基づいてファイルから列を抽出する方法は?

FILE1:

322510472 
322510472 
322510472 
322510484 
322510484 
322510484 
322510493 

FILE2:

109287879,Invertebrate_iridescent_virus_3,109287879,148,1,148,NCVOG0391,0 
109287880,Invertebrate_iridescent_virus_3,109287880,458,1,458,, 
109287881,Invertebrate_iridescent_virus_3,109287881,156,1,156,, 
109287882,Invertebrate_iridescent_virus_3,109287882,451,1,451,NCVOG1423,0 
109287883,Invertebrate_iridescent_virus_3,109287883,217,1,217,NCVOG4910,2 
109287884,Invertebrate_iridescent_virus_3,109287884,494,1,494,NCVOG0211,0 
109287885,Invertebrate_iridescent_virus_3,109287885,447,1,447,NCVOG1077,0 
109287886,Invertebrate_iridescent_virus_3,109287886,347,1,347,NCVOG0967,2 

両方file1file2列1及びfile2の3で表示されるキーでソートされています。

私は file2から第三 file1から私のキーを含むファイル、 file3、と同様に、列2と7を生成するために、と一致するエントリがに存在しない場合でも、 file1中に存在する任意のキーを省略しない必要

file2

私は、キー、file1の私のファイルに46のエントリを持っていることを知っています。しかし、次のawkスクリプトを使用すると、出力は44行しか表示されません。

彼らは私もこれらのキーを含む他のファイルに保持する必要があり、実際のデータに対応して、私は、私のawkの出力で私のキーのいずれかを削除しないようにする必要があります。

提案がありますか?すべての助けをありがとう。私はしばらくの間、スタックのオーバーフローを読んできましたが、これは私の最初の質問です!

+1

「$ 1 in a」条件は、両方のファイルのエントリにのみ当てはまります。一致しなかったものも印刷する必要があります。もしキーが一意であれば、それぞれのマッチの後に 'a'からキーを削除し、' END'ブロックの残りのキーを反復することができます。後でソートすることもできます。しかし、データがすでにソートされているので、ここでは 'join'が良い解決法です。 – karakfa

+1

問題を実際に表現できるサンプルデータを提供する必要があります –

答えて

3

あなたのデータは、任意のマッチを持っていないので、私はここに一致する項目

$ join -t, -a1 -o1.1,2.2,2.7 file1 file2 

109287879,Invertebrate_iridescent_virus_3,NCVOG0391 
109287880,Invertebrate_iridescent_virus_3, 
109287882,Invertebrate_iridescent_virus_3,NCVOG1423 
109287884,Invertebrate_iridescent_virus_3,NCVOG0211 
109287886,Invertebrate_iridescent_virus_3,NCVOG0967 
322510472,, 
322510472,, 
322510472,, 

を含めるようにあなたの鍵を変更し、私が代わりに使用さFILE1です。

109287879 
109287880 
109287882 
109287884 
109287886 
322510472 
322510472 
322510472 
関連する問題