Поиск точной разницы

Я получил нужные мне цифры с помощью SysBench , который может проводить тесты памяти с произвольным доступом и с небольшими блоками размером до 1 КБ.

0
30.08.2019, 14:46
2 ответа

Более общий подход к сравнению любого количества несортированных файлов с использованием GNU awk для массивов массивов и ARGIND:

$ cat tst.awk
BEGIN { OFS="\t" }
{ cnt[$0][ARGIND]++ }
END {
    for (str in cnt) {
        for (fileNr=1; fileNr<=ARGIND; fileNr++) {
            printf "%d%s", cnt[str][fileNr], OFS
        }
        print str
    }
}

$ awk -f tst.awk a b
1       2       1111|100|11/11/1111|a
1       1       2222|200|11/11/1111|a
1       1       3333|300|11/11/1111|a
1       0       4444|400|11/11/1111|a
0       1       5555|500|11/11/1111|a

Вышеприведенное показывает каждую уникальную строку во всех файлах вместе с тем, сколько раз данная строка появляется в первом файле, сколько раз во втором и т. д.

Чтобы получить желаемый результат, можно просто:

$ awk -f tst.awk a b | awk '$2>$1' | cut -f3-
1111|100|11/11/1111|a
5555|500|11/11/1111|a
1
28.01.2020, 02:22

grep здесь не подходит, так как он используется для извлечения отдельных строк, соответствующих некоторой форме регулярного выражения (, а не для сравнения файлов на самом деле ). Он не сможет вернуть одно совпадение и отбросить другое (первые две строки вашего файлаb).

Вы можете использоватьcomm:

$ comm -13 a b
1111|100|11/11/1111|a
5555|500|11/11/1111|a

Обратите внимание, что commзависит от отсортированных входных данных.

Приведенная выше команда commиспользует -13для отбрасывания первого и третьего столбцов в выходных данных по умолчанию. По умолчанию он выводит строки, найденные только в первом файле в столбце 1, строки, найденные только во втором файле в столбце 2, и общую строку в последнем столбце (. См. руководство для commв вашей системе. стандартная утилита):

$ comm a b
                1111|100|11/11/1111|a
        1111|100|11/11/1111|a
                2222|200|11/11/1111|a
                3333|300|11/11/1111|a
4444|400|11/11/1111|a
        5555|500|11/11/1111|a
2
28.01.2020, 02:22

Теги

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