Ich habe ein technisches Problem mit dem Awk-Code

Ich habe ein technisches Problem mit dem Awk-Code

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, nextnachdemi==2

verwandte Informationen