タブ区切りファイルの複数の単語を代替単語に置き換える

タブ区切りファイルの複数の単語を代替単語に置き換える

生物を表すコード(ctc、nmg、nmlなど)を含むタブ区切りのファイルがあります(File_1)。

522 ctc:CTC00972    -   506 3.20E-138   
522 nmg:Nmag_3027   -   561 4.70E-73
522 nml:Namu_3564   -   566 1.80E-146

コードを生物名(File_2)に関連付けるタブ区切りファイルもあります。

ctc  Clostridium_tetani_E88
nla  Neisseria_lactamica
nmg  Natrialba_magadii

File_1のコードをFile_2の生物名にどのように変更しますか?

希望の出力:

522 Clostridium_tetani_E88:CTC00972 -   506 3.20E-138   
522 Natrialba_magadii:Nmag_3027     -   561 4.70E-73
522 Neisseria_lactamica:Namu_3564   -   566 1.80E-146

データセット全体には数千のコードがあり、File_1とFile_2の生物の順序が異なることに注意してください。

ベストアンサー1

これは実際には、「あるファイルからルックアップテーブルを作成して別のファイルを処理するために使用する」のバリエーションにすぎず、ルックアップキーを2番目のフィールドから切り離す必要があるという欠点があります。awkたとえば、次のようにできます。

awk '
  BEGIN{OFS=FS="\t"} 
  NR==FNR {
    a[$1]=$2; next
  } 
  {
    split($2,b,":"); 
    if (b[1] in a) $2 = a[b[1]]":"b[2]
  } 1' File_2 File_1

おすすめ記事