разница между содержанием двух файлов - PullRequest
8 голосов
/ 30 сентября 2010

У меня есть два файла, одно подмножество файлов другого, и я хочу получить файл, содержимое которого не является общим для обоих. Например,

File1

apple
mango
banana
orange
jackfruit
cherry
grapes
eggplant
okra
cabbage

File2

apple
banana
cherry
eggplant
cabbage

Результирующий файл, разница между двумя файлами выше

mango
orange
jackfruit
grapes
okra

Любые идеи по этому поводу приветствуются.

Ответы [ 4 ]

11 голосов
/ 30 сентября 2010

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

$ comm -23 <(sort file1.txt) <(sort file2.txt)
grapes
jackfruit
mango
okra
orange

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

  -1              suppress lines unique to FILE1
  -2              suppress lines unique to FILE2
  -3              suppress lines that appear in both files
3 голосов
/ 07 октября 2010

1 Только один экземпляр, либо

  • кошка Файл1 Файл2 | сортировать | uniq -u

2 Только в первом файле

  • кошка Файл1 Файл2 Файл2 | сортировать | uniq -u

3 Только во втором файле

  • cat File1 File1 File2 | сортировать | uniq -u
2 голосов
/ 01 октября 2010

использовать awk, сортировка не требуется (уменьшить накладные расходы)

$ awk 'FNR==NR{f[$1];next}(!($1 in f)) ' file2 file
mango
orange
jackfruit
grapes
okra
0 голосов
/ 10 июня 2011

1. Файлы необычные для обоих файлов

diff --changed-group-format="%<" --unchanged-group-format="%>" file1 file2

2. Файл, уникальный для первого файла

diff --changed-group-format="%<" --unchanged-group-format="" file1 file2

3. Файл, уникальный для второго файла

diff --changed-group-format="" --unchanged-group-format="%>" file1 file2

Надеюсь, у вас это получится

...