ファイル1の列1がファイル2の列5と一致する場合は、ファイル1の列1をファイル2の列1に置き換える必要があります。
ファイル1
ENSG00000237491 1 714150 745440 2 1 143562
ENSG00000230092 1 736259 745541 2 1 143562
ENSG00000269831 1 738532 739137 2 1 143562
ENSG00000187634 1 860260 879955 26 20 130731
ファイル2
AL669831.1 1 738532 739137 ENSG00000269831
SAMD11 1 860260 879955 ENSG00000187634
RP11-206L10.9 1 714150 745440 ENSG00000237491
RP11-206L10.8 1 736259 745541 ENSG00000230092
出力は次のようにする必要があります
RP11-206L10.9 1 714150 745440 2 1 143562
RP11-206L10.8 1 736259 745541 2 1 143562
AL669831.1 1 738532 739137 2 1 143562
SAMD11 1 860260 879955 26 20 130731
以下のコードを試しましたが、うまくいかず、出力は印刷されず、エラーなしですぐに停止します。
awk 'NR==FNR{a[$1]=$1;next} $5 in a {$1=a[$1];print}' FS='\t' OFS='\t' file1.txt file2.txt > output.txt
ありがとうございます!
ベストアンサー1
file1.txt
上記のように、ファイルと編集されたバージョンを使用してfile2.txt
(それで、file1.txtに$ 5を持つfile2.txtにいくつかの入力行があります):
AL157931.1 13 23551994 23552136 ENSG00000237491
HMGA1P6 13 23708313 23708703 ENSG00000230092
RNY3P4 13 23726725 23726825 ENSG00000207157
file1.txt を読み込む前に file2.txt を読み込むと、次のような出力が得られます。
$ awk 'BEGIN {FS=OFS="\t"}
NR==FNR {a[$5]=$1; next};
$1 in a {$1=a[$1];print}' file2.txt file1.txt
AL157931.1 1 714150 745440 2 1 143562
HMGA1P6 1 736259 745541 2 1 143562
これがうまくいくのは、キーがfile2の$ 5で、値が同じファイルの$ 1である連想配列を構築しようとしていることに気づくことです。
次に、file1を繰り返すときに$ 1が配列のキーであることを確認します。その場合、$ 1を一致する値(つまりfile2の対応する$ 1)に置き換えて、その行を印刷します。