Você usa NR
como um índice quando coloca dados em m
:
m[i,NR]=$i
Depois de ler o arquivo legend
, NR
não é redefinido, o que significa que o índice não começa em 1,1
. Você pode usar FNR
ou mh + 1
.
Eu não olhei para o resto do código.
Algumas sugestões de melhorias:
Eu não sei como são seus dados, então estou adivinhando. NF
e FNR
são deixados inalterados da última linha de entrada no bloco END
, então enquanto a última linha do último arquivo estiver correta e totalmente especificada, isso deve trabalhos. Isso elimina as variáveis mh
e mw
.
A maneira fácil de fazer um loop em um array simples é usar for (i in arr)
. Isso define i
para cada índice no array, por sua vez. Note, porém, que os índices podem ser apresentados ao loop "fora de ordem".
O primeiro bloco lê o arquivo legend
. Isto significa que este tem que ser o primeiro operando de arquivo na linha de comando.
NR == FNR { l[FNR] = $1; next }
{
for (i = 1; i <= NF; i++) {
m[i,FNR] = $i
}
print
}
END {
print "LEGEND:"
for (i in l) print l[i]
print "MAIN:"
for (h = 1; h <= FNR; h++) {
printf("For line %d\n", h)
for (w = 1; w <= NF; w++) {
printf("For element %d\n", w)
if (m[w,h]) print m[w,h]
}
}
}
Para o último loop duplo, você também pode fazer
for (i in m) print i, m[i]
mas você sente falta do pedido e da saída extra informativa.