Это связано с одним из моих предыдущих вопросов:Сравнение текстовых файлов с помощью 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?
EDIT: Вот в чем проблема. Первый цикл 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