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番目のフィールド)でソートする必要があります。