На этот вопрос уже есть ответ:
Как я могу сравнить данные в 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
, похоже, не справляется со своей задачей.
Это - то, для чего comm
:
$ comm <(sort file1) <(sort file2)
1
2
3
4
5
6
a
b
c
первый столбец является строками, только появляющимися в файле 1
, второй столбец является строками, только появляющимися в файле 2
, третий столбец является строками, характерными для обоих файлов
comm
, требует, чтобы входные файлы, которые будут отсортированы
К , исключили любой столбец из появления, добавили опцию с тем номером столбца. Например, для наблюдения только строк вместе используйте comm -12 ...
или строки, которые находятся только в file2, comm -13 ...
Неважно, если Ваш file1 и file2 отсортированы или нет, используйте команду awk следующим образом:
awk 'NR==FNR{a[$0];next}!($0 in a)' file2 file1
4
5
6
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"
xxdiff
несопоставлено, если просто необходимо графически видеть изменения между двумя файлами (или каталоги!):
Как регулярный diff
и comm
, Ваши входные файлы должны быть отсортированы сначала.
sort file1.txt > file1.txt.sorted
sort file2.txt > file2.txt.sorted
xxdiff file1.txt.sorted file2.txt.sorted