文字列を他のファイルの一致に置き換えます。接続できません。

文字列を他のファイルの一致に置き換えます。接続できません。

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

ファイル1:

cluster17 7 Rde_Locus_34636 Rde_Locus_39558 Rde_Locus_44272 Rde_Locus_20977 Rde_Locus_50929 Rph_Locus_10923 Rph_Locus_65326 
cluster18 7 Rde_Locus_1381 Rde_Locus_11734 Rde_Locus_4781 Rph_Locus_26879 Rph_Locus_7821 Rde_Locus_533 Rde_Locus_21493 
cluster19 7 Rde_Locus_6450 Rde_Locus_10727 Rde_Locus_1801 Rde_Locus_25045 Rph_Locus_13685 Rph_Locus_6953 Rph_Locus_22248 
cluster21 7 Rde_Locus_23138 Rde_Locus_10462 Rph_Locus_10145 Rph_Locus_49405 Rde_Locus_42639 Rph_Locus_70757 Rde_Locus_36462 

ファイル2:

Rde_Locus_36462 M2
Rde_Locus_42639 S1
Rde_Locus_4781 M5
Rde_Locus_533 M3
Rde_Locus_6450 M1
Rph_Locus_10145 S4
Rph_Locus_13685 M2
Rph_Locus_22248 M4
Rph_Locus_26879 S5

出力が次のようになるように、これら2つのファイルを結合したいと思います。

cluster17 7 Rde_Locus_34636 Rde_Locus_39558 Rde_Locus_44272 Rde_Locus_20977 Rde_Locus_50929 Rph_Locus_10923 Rph_Locus_65326 
cluster18 7 Rde_Locus_1381 Rde_Locus_11734 Rde_Locus_4781_M5 Rph_Locus_26879_S5 Rph_Locus_7821 Rde_Locus_533_M3 Rde_Locus_21493 
cluster19 7 Rde_Locus_6450_M1 Rde_Locus_10727 Rde_Locus_1801 Rde_Locus_25045 Rph_Locus_13685_M2 Rph_Locus_6953 Rph_Locus_22248_M4 
cluster21 7 Rde_Locus_23138 Rde_Locus_10462 Rph_Locus_10145_S4 Rph_Locus_49405 Rde_Locus_42639_S1 Rph_Locus_70757 Rde_Locus_36462_M2

つまり、の対応する一致に_$2fromを追加します。私は答えがどんな組み合わせだと思いますが、私はそれで苦労しています。ソートできないため、これは使用できません。File2File1grep -fsedjoinFile1

ベストアンサー1

考えられるアプローチは次のとおりです。連想配列を持つルックアップテーブルを使用しますawk

awk '
  NR==FNR {
    a[$1] = $1 "_" $2; next;
  } 
  {
    for (i=1;i<=NF;i++) {if ($i in a) $i = a[$i];} 
  }
  1' file2 file1

このサイトで「join awk」と検索すると同様の例がたくさんあります。

おすすめ記事