特定のフィールドの Grep ファイル

特定のフィールドの Grep ファイル

2つのファイルがあります。

ファイル1:

Locus_1
Locus_2
Locus_3

ファイル2:

3  3  Locus_1  Locus_40  etc_849    
3  2  Locus_2  Locus_94  *    
2  2  Locus_6  Locus_1  *    
2  3  Locus_3,Locus_4  Locus_50  *    
3  3  Locus_9  Locus_3  etc_667

grep -F最初のファイルのファイルを作成したいと思います。ただたとえば、2番目のファイルの3番目の列(元のフィールドはFile2タブで区切られています)では、出力は次のようになります。

出力:

3  3  Locus_1  Locus_40  etc_849    
3  2  Locus_2  Locus_94  *    
2  3  Locus_3,Locus_4  Locus_50  *

どうすればいいですか?

編集の混乱:いいえ、カンマはエラーではありません。 1つの列に複数のLocus_ *を持つことができます。 2番目のLocus_ *(カンマの後のもの)が行の1つと一致する場合は、File1それも検索されます!

ベストアンサー1

必要でない場合は、grep簡単な解決策は次のものを使用することですjoin

$ join -1 1 -2 3 <(sort file1) <(sort -k3 file2)
Locus_1 3 3 Locus_40 etc_849
Locus_2 3 2 Locus_94 *
Locus_3 2 3 Locus_4 Locus_50 *

説明する:

  • join -1 1 -2 3:最初のファイルの最初の(唯一の)フィールドと2番目のファイルの3番目のフィールドを使用して2つのファイルをリンクします。同じときに印刷されます。
  • <(sort file1)joinソートされた入力が必要です。
  • <(sort -k3 file2):入力は結合フィールド(ここでは3番目のフィールド)でソートする必要があります。

おすすめ記事