Aqui está a awk solution.
awk '{split($0,ary1,/[ ]+/); getline x; split(x,ary2,/[ ]+/);
for (i in ary1)if (!(ary1[i]+ary2[i])){ary1[i]=ary2[i]=9}}
END{for (r=1;r<=NF;r++) printf ("%d ", ary1[r]); printf"\n";
for (z=1;z<=NF;z++) printf ("%d ", ary2[z]); printf"\n"}' infile
Explicações:
-
split($0,ary1,/[ ]+/);: lê e divide a primeira linha em uma matrizary1com um ou mais delimitadores de espaços entre. -
getline x; split(x,ary2,/[ ]+/);: lê a segunda linha na variávelxe a divide no arrayary2. -
for (i in ary1)if (!(ary1[i]+ary2[i])){ary1[i]=ary2[i]=9}}: loop na matrizary1para cada índice emise a soma de ambos os campos fosse zero (!(0)acionaráif(1)como condição real ) em seguida, defina o valor de ambos os campos como9. -
for (r=1;r<=NF;r++) printf ("%d ", ary1[r]); printf"\n";: imprima agora os valores finais de cada matrizary1e na próxima linhaary2.
Para aplicar em todos os 11 milhões de arquivos, salve as alterações no formato FILENAME.out , onde FILENAME indica a leitura atual do arquivo nomedado por awk .
awk '{split($0,ary1,/[ ]+/); getline x; split(x,ary2,/[ ]+/);
for (i in ary1)if (!(ary1[i]+ary2[i])){ary1[i]=ary2[i]=9}}
END{for (r=1;r<=NF;r++) printf ("%d ", ary1[r])>FILENAME".out"; printf"\n">FILENAME".out";
for (z=1;z<=NF;z++) printf ("%d ", ary2[z])>FILENAME".out"
}' wa_filtering_DP15_good_pops_snps_file_{1..11232111}