Aqui está outra abordagem de awk :
$ awk '{a[$4]=0;a[$5]=1; for(i=6;i<=NF;i++){$i=a[$i]}}1;' file
1 rs6687776 1020428 T C 0 1 0 1 1 1 0 1 1 1 0 1
Explicação
-
a[$4]=0;a[$5]=1;: cria a matrizacom duas chaves,$4e$5. O valor para$4está definido como0e o valor de$5para 1. -
for(i=6;i<=NF;i++){$i=a[$i]}: para cada número de campo de 6 até o último, defina esse campo para o que estiver armazenado na matriz para o nucleotídeo encontrado. -
1;: abreviação do atalho para "imprimir esta linha".
Você também pode fazer isso com o Perl:
$ perl -lane 's/$F[3]/0/ for @F[5..$#F]; s/$F[4]/1/ for @F[5..$#F]; print "@F"' file
1 rs6687776 1020428 T C 0 1 0 1 1 1 0 1 1 1 0 1
Esta é a mesma ideia. O -a faz com que perl aja como awk , dividindo cada linha no espaço em branco na matriz @F . Em seguida, substituímos todos os casos do nucleotídeo encontrado no quarto campo ( $F[3] , matrizes começam em 0) com 0 e todos os casos do quinto ( $F[4] ) com 1 . O for @F[5..$#F] significa que a substituição é aplicada apenas nos campos 6 a último. Finalmente, o array modificado é impresso.