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.