awk 코드에 기술적 문제가 있습니다.

awk 코드에 기술적 문제가 있습니다.

이것은 내 이전 질문 중 하나와 관련이 있습니다.Bash와 AWK를 사용하여 텍스트 파일 비교

파일1.txt

Name  Col1  Col2  Col3  
-----------------------
row1  1     4     7        
row2  2     5     8         
row3  3     6     9 

파일2.txt

Name  Col1  Col2  Col3  
-----------------------        
row1  1     4     7
row2  2     5     999

두 파일을 비교하는 방법을 어느 정도 알아 냈습니다. 하지만 어떤 이유에서든 내가 원하는 결과를 얻지 못합니다. 다음은 파일을 비교하는 데 사용하는 코드입니다.

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

예상 결과:

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

실제 결과:

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

왜 0이 출력의 일부인지 모르겠습니다. 왜 0이 있는지 아는 사람 있나요?

편집: 여기에 문제가 있습니다. 첫 번째 for 루프는 한 번만 반복됩니다. 왜?

답변1

버그: 변경

FNR == NR {
    for (i = 2; i <= NF; i++) 
    {
        a[i,$1] = $i; 
        b[$1];
        next;
    }
}

에게

FNR == NR {
    for (i = 2; i <= NF; i++) 
    {
        a[i,$1] = $i; 
    }
    b[$1];
    next;
}

next당신은 나중에 전화를 했어요i==2

관련 정보