как я могу сравнить данные в 2 файлах определить общие и уникальные данные? [дубликат]

На этот вопрос уже есть ответ:

Как я могу сравнить данные в 2 файлах, чтобы определить общие и уникальные данные? Я не могу сделать это построчно, потому что у меня есть файл 1, который содержит, скажем, 100 идентификаторов / кодов / наборов номеров, и я хочу сравнить файл 2 с файлом 1.

Дело в том, что файл 2 содержит подмножество данные в файле 1, а также данные, уникальные для файла 2, например:

file 1      file 2
1            1
2            a
3            2
4            b
5            3 
6            c

Как я могу сравнить оба файла, чтобы определить данные, общие и уникальные для каждого файла? diff , похоже, не справляется со своей задачей.

4
задан 2 April 2015 в 12:58

3 ответа

Это - то, для чего comm :

$ comm <(sort file1) <(sort file2)
        1
        2
        3
4
5
6
    a
    b
    c

первый столбец является строками, только появляющимися в файле 1
, второй столбец является строками, только появляющимися в файле 2
, третий столбец является строками, характерными для обоих файлов

comm, требует, чтобы входные файлы, которые будут отсортированы

К , исключили любой столбец из появления, добавили опцию с тем номером столбца. Например, для наблюдения только строк вместе используйте comm -12 ... или строки, которые находятся только в file2, comm -13 ...

5
ответ дан 2 April 2015 в 12:58

Неважно, если Ваш file1 и file2 отсортированы или нет, используйте команду следующим образом:

уникальные данные в file1:

awk 'NR==FNR{a[$0];next}!($0 in a)' file2 file1
4
5
6

уникальные данные в file2:

awk 'NR==FNR{a[$0];next}!($0 in a)' file1 file2
a
b
c

общие данные:

awk 'NR==FNR{a[$0];next} ($0 in a)' file1 file2
1
2
3

Объяснение:

NR==FNR    - Execute next block for 1st file only
a[$0]      - Create an associative array with key as '$0' (whole line) and copy that into it as its content.
next       - move to next row
($0 in a)  - For each line saved in `a` array:
             print the common lines from 1st and 2nd file "($0 in a)' file1 file2"
             or unique lines in 1st file only "!($0 in a)' file2 file1"
             or unique lines in 2nd file only "!($0 in a)' file1 file2"
6
ответ дан 2 April 2015 в 12:58

xxdiff несопоставлено, если просто необходимо графически видеть изменения между двумя файлами (или каталоги!):

enter image description here

Как регулярный diff и comm, Ваши входные файлы должны быть отсортированы сначала.

sort file1.txt > file1.txt.sorted
sort file2.txt > file2.txt.sorted
xxdiff file1.txt.sorted file2.txt.sorted
0
ответ дан 2 April 2015 в 12:58

Другие вопросы по тегам:

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