awkを使用した列の一致と交換

awkを使用した列の一致と交換

ファイル1の列1がファイル2の列2と一致する場合は、ファイル2の列13をファイル1の列2に置き換える必要があります。

ファイル1

AAAA00000687697 HPNMS
AAAA00000693037 GER112
AAAA00000349750 FRA0158

ファイル2

585     AAAA00000687697 1    +       11868   14409   14409   14409   3       11868,12612,13220,      12227,12721,14409,      0       BBBB00000223972 none    none    -1,-1,-1,
585     AAAA00000693037 1    +       11871   14412   14412   14412   3       11871,12612,13224,      12227,12721,14412,      0       BBBB00000223972 none    none    -1,-1,-1,
585     AAAA00000349750 1    +       11873   14409   14409   14409   4       11873,12594,13402,13660,        12227,12721,13655,14409,        0       BBBB00000223972 none    none    -1,-1,-1,-1,

出力は次のようにする必要があります

585     AAAA00000687697 1    +       11868   14409   14409   14409   3       11868,12612,13220,      12227,12721,14409,      0       HPNMS           none    none    -1,-1,-1,
585     AAAA00000693037 1    +       11871   14412   14412   14412   3       11871,12612,13224,      12227,12721,14412,      0       GER112          none    none    -1,-1,-1,
585     AAAA00000349750 1    +       11873   14409   14409   14409   4       11873,12594,13402,13660,        12227,12721,13655,14409,        0       FRA0158 none    none    -1,-1,-1,-1,

私は次のコードを試しました

 awk 'NR==FNR{a[$1]=$2;next} $2 in a {$13=a[$1];print}' FS='\t' OFS='\t' file1.txt file2.txt  > output.txt

列 13 が空のファイル 2 を印刷します。

a[$1]だけを印刷しようとすると、空のファイルが印刷されます。最初の中かっこから次の部分を削除すると、a[$1] のみが印刷されます。なぜ配列を保存するのに問題があるのか​​わかりません。

ベストアンサー1

可能であれば、$13配列文字列に置き換えてください。a[$2]

awk 'NR==FNR{a[$1]=$2;next}($2 in a){$13=a[$2]}1' file1 file2 

おすすめ記事