Você quase consegue.
awk 'NR==FNR{tmp[$1]=$2;next};{$6=tmp[$1] ; print }' file2.txt file1.txt
Onde:
-
$6 = tmp[$1]
irá substituir o 6º campo.
Eu tenho dois arquivos. file1
tem 6 colunas, file2
tem 2 colunas. Desejo substituir os valores na sexta coluna de file1
pelos valores da coluna 2 de file2
, com base nas variáveis de ID correspondentes (coluna 1 nos dois arquivos).
Nota: file2
contém mais assuntos do que file1
. Portanto, o comando abaixo não funcionou, infelizmente:
awk 'NR==FNR{tmp[$1]=$2;next}{print $0,tmp[$1]}' file2 file1
file1
se parece com:
HG00096 HG00096 0 0 0 -9
HG00097 HG00097 0 0 0 -9
HG00099 HG00099 0 0 0 -9
HG00100 HG00100 0 0 0 -9
HG00102 HG00102 0 0 0 -9
file2
se parece com:
HG00096 2
HG00097 5
HG00098 5
HG00099 3
HG00100 3
HG00101 5
HG00102 3
Gostaria que o arquivo resultante tivesse a seguinte aparência:
HG00096 HG00096 0 0 0 2
HG00097 HG00097 0 0 0 5
HG00099 HG00099 0 0 0 3
HG00101 HG00100 0 0 0 5
HG00102 HG00102 0 0 0 3
Use join
:
join -j 1 -o 0,1.2,1.3,1.4,1.5,2.2 file1 file2
Onde:
-j
define o campo de junção de ambos os arquivos -o
formata a saída conforme desejado Tags text-processing awk join