Используя ваш file1.txt
, как указано выше, и отредактированную версию вашего file2.txt
(, так что в файле 2.txt есть несколько входных строк, где $5 находится в файле 1.txt):
AL157931.1 13 23551994 23552136 ENSG00000237491
HMGA1P6 13 23708313 23708703 ENSG00000230092
RNY3P4 13 23726725 23726825 ENSG00000207157
Читая file2.txt до file1.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
Ключом к тому, как это работает, является понимание того, что мы хотим построить ассоциативный массив, в котором ключами являются $5 из файла2, а значениями являются $1 из того же файла.
Затем, когда мы перебираем файл1, проверяем, является ли $1 ключом в массиве. Если это так, замените $1 совпадающим значением (, то есть соответствующим $1 из файла2 ), и напечатайте строку.