Dies hängt mit einer meiner vorherigen Fragen zusammen:Vergleichen von Textdateien mit Bash und AWK
Datei1.txt
Name Col1 Col2 Col3
-----------------------
row1 1 4 7
row2 2 5 8
row3 3 6 9
Datei2.txt
Name Col1 Col2 Col3
-----------------------
row1 1 4 7
row2 2 5 999
Ich habe eine Möglichkeit gefunden, zwei Dateien zu vergleichen. Aber aus irgendeinem Grund bekomme ich damit nicht das gewünschte Ergebnis. Hier ist der Code, den ich zum Vergleichen der Dateien verwende.
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
Erwartetes Ergebnis:
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
Tatsächliche Ergebnis:
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
Ich weiß nicht, warum 0 Teil der Ausgabe ist. Weiß jemand, warum 0 da ist?
EDIT: Hier ist das Problem. Die erste for-Schleife wird nur einmal wiederholt. Warum?
Antwort1
Fehler: ändern
FNR == NR {
for (i = 2; i <= NF; i++)
{
a[i,$1] = $i;
b[$1];
next;
}
}
Zu
FNR == NR {
for (i = 2; i <= NF; i++)
{
a[i,$1] = $i;
}
b[$1];
next;
}
Du hast angerufen, next
nachdemi==2