Как сравнить два файла построчно, чтобы проверить, сколько из них переместилось вверх или вниз? [закрыто]

Итак, после некоторого поиска и разговора со службой поддержки, мы наконец разобрался, что останавливает UFW. В системе также был настроен APF (Advanced Policy Firewall - R-fx Networks), который добавляет в систему задание cron. В полночь задание удаляет все правила и сбрасывает правила, определенные для APF .

2
08.09.2017, 22:32
2 ответа

Ниже ответ после правильного разъяснения вопроса, вот окончательное решение для этого:

awk -F'\n' -v RS='Stanford University' 
    'NR==1 && NR==FNR{for (i=1;i<NF;i++)above[$i]++;next}
     NR==2&&NR==FNR{for (j=2;j<NF;j++)below[$j]++;next} 
     NR==3{for (x=1;x<NF;x++)X2017[$x]++;next}
     NR==4{for (y=2;y<NF;y++)Y2017[$y]++;next} 
END{ for (Z in Y2017) {if (Z in above) print Z>"Ranked-above.txt" }; 
     for (T in X2017) {if (T in below) print T>"Ranked-below.txt" };
}' 2018  2017

На выходе будут два файла с рейтингом -выше.txt и с рейтингом -ниже.txt с ожидаемым результатом.

**Ranked-above.txt**
University of Cambridge

**Ranked-below.txt**

Вы можете искать другие университеты, указав вRS='University NAME HERE'

2
27.01.2020, 21:58

Это не ответ на ваш вопрос в том смысле, что он не дает нужного результата. Однако он создает таблицу изменений рангов между строками в двух файлах.

Следующая программа awkвыведет изменение ранжирования между двумя файлами, как показано здесь:

$ awk -f script.awk rankings-2017.txt rankings-2018.txt
        University of Oxford
 +2     University of Cambridge
 -1     California Institute of Technology
 -1     Stanford University
NEW     Uppsala University
 -1     Massachusetts Institute of Technology

(«Уппсальский университет» был добавлен в предпоследнюю строку второго файла ).

Скрипт:

NR == FNR       { rank[++n] = $0 }
NR != FNR       { ++nn;
    for (i = 1; i <= n; ++i) {
        if (rank[i] == $0) {
            if (i == nn) {
                printf("   ");
            } else {
                printf("%+3d", i - nn);
            }
            printf("\t%s\n", $0);
            next;
        }
    }
    printf("NEW\t%s\n", $0);
}
2
27.01.2020, 21:58

Теги

Похожие вопросы