Сравнение файла и печать совпадений и различий - PullRequest
0 голосов
/ 31 января 2019

Я пытаюсь сравнить 2 файла и распечатать вывод, как показано ниже:

F1:

a|b|c|d|e|f|g
q|w|e|r||f|

F2:

a|b|c|d|e|f|g
q|w|e|r|t|f|u

вывод:

f1 - a|b|c|d|e|f|g - f2 - a|b|c|d|e|f|g  - All columns are matching
f1 - q|w|e|r||f| - f2 - q|w|e|r|t|f|u - Column 5 and 7 are not matching

1 Ответ

0 голосов
/ 01 февраля 2019

Следующее делает именно то, что было задано ... (отмечая два пробела перед "- Все" и один пробел в несоответствующем регистре, а f1 и f2 - строчные).Если мы хотим использовать имена файлов вместо f1 и f2, переменная FILENAME доступна

#! /usr/bin/awk -f
BEGIN {
    FS = "|"
    split("", f1)
}

NR == FNR { # this is true only for the first file processed
    f1[FNR] = $0
    next
}

$0 == f1[FNR] { # with the second file, if lines are equal...
    print "f1 - " f1[FNR] " - f2 - " $0 "  - All columns are matching"
    next
}

{ # if the lines are not equal, split and find the columns not equal
    sz = split(f1[FNR], f)
    if (NF > sz)
        sz = NF
    c = ""
    for (i=1; i<=sz; ++i)
            if (f[i] != $i) {
                    c = i++
                    break
            }
    for (; i<=sz; ++i)
            if (f[i] != $i)
                    c = c " and " i
    print "f1 - " f1[FNR] " - f2 - " $0 " - Column " c " are not matching"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...