Uma abordagem awk
:
$ awk 'NR==FNR{a[$1]=$2; next} {split($1,b,/:/); $7=a[b[2]]}1;' b.txt a.txt
chr:1:10539:A:C 10539 C A 0.545987 0.508902 4972 0.36065 + 1
chr:2:13494:A:G 13494 A G 0.330493 0.0264746 4972 0.733423 + 1
chr:7:13494:A:G 13494 A G 0.330493 0.0264746 4970 0.733423 + 1
Explicação
-
NR==FNR{a[$1]=$2; next}
:NR
é o número da linha de entrada atual eFNR
é o número da linha atual do arquivo atual. Os dois serão apenas iguais ao ler o primeiro arquivo. Portanto, isso salvará as informações deb.txt
na matriza
cujos índices são os cromossomos deb.txt
e cujos valores são os números associados. Onext
pula para a próxima linha e garante que o segundo bloco não seja executado porb.txt
. -
split($1,b,/:/); $7=a[b[2]]
: só será executado pora.txt
. Primeiro, ele divide o primeiro campo em:
na matrizb
. Então, o segundo elemento deb
será o cromossomo. Em seguida, ele define o sétimo campo do arquivo como o que foi armazenado na matriza
do cromossomo armazenado emb[2]
(isso é o quea[b[2]]
significa:a[ b[2] ]
). -
1;
: esta é uma abreviação de awk para "imprimir esta linha".