Esto está relacionado con una de mis preguntas anteriores:Comparar archivos de texto usando Bash y AWK
archivo1.txt
Name Col1 Col2 Col3
-----------------------
row1 1 4 7
row2 2 5 8
row3 3 6 9
archivo2.txt
Name Col1 Col2 Col3
-----------------------
row1 1 4 7
row2 2 5 999
De alguna manera he descubierto una manera de comparar dos archivos. Pero por alguna razón no me da el resultado que quiero. Aquí está el código que uso para comparar los archivos.
awk '
FNR < 2 { next }
FNR == NR {
for (i = 2; i <= NF; i++)
{
a[i,$1] = $i;
}
b[$1];
next;
}
($1 in b) {
for (i = 2; i <= NF; i++)
{
if (a[i,$1] == $i)
printf("%s->Col%d: %d vs %d: Equal\n", $1, i-1, a[i,$1], $i);
else
printf("%s->Col%d: %d vs %d: Not Equal\n", $1, i-1, a[i,$1], $i);
}
} ' file1.txt file2.txt
Resultado Esperado:
row2->Col1: 1 vs 1: Equal
row2->Col2: 4 vs 4: Equal
row2->Col3: 7 vs 7: Equal
row1->Col1: 2 vs 2: Equal
row1->Col2: 5 vs 5: Equal
row1->Col3: 8 vs 999: Not Equal
Resultado actual:
row2->Col1: 1 vs 1: Equal
row2->Col2: 4 vs 4: Equal
row2->Col3: 0 vs 7: Not Equal
row1->Col1: 2 vs 2: Equal
row1->Col2: 5 vs 5: Equal
row1->Col3: 0 vs 999: Not Equal
No sé por qué 0 es parte del resultado. ¿Alguien sabe por qué aparece 0?
EDITAR: Aquí está el problema. El primer bucle for solo se repite una vez. ¿Por qué?
Respuesta1
Error: cambiar
FNR == NR {
for (i = 2; i <= NF; i++)
{
a[i,$1] = $i;
b[$1];
next;
}
}
a
FNR == NR {
for (i = 2; i <= NF; i++)
{
a[i,$1] = $i;
}
b[$1];
next;
}
Estabas llamando next
despuési==2