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.txtna matrizacujos índices são os cromossomos deb.txte cujos valores são os números associados. Onextpula 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 debserá o cromossomo. Em seguida, ele define o sétimo campo do arquivo como o que foi armazenado na matrizado cromossomo armazenado emb[2](isso é o quea[b[2]]significa:a[ b[2] ]). -
1;: esta é uma abreviação de awk para "imprimir esta linha".