2010-09-30 6 views
8

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

File1

apple 
mango 
banana 
orange 
jackfruit 
cherry 
grapes 
eggplant 
okra 
cabbage 

File2

apple 
banana 
cherry 
eggplant 
cabbage 

Полученный файл, разность двух указанных выше файлов

mango 
orange 
jackfruit 
grapes 
okra 

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

ответ

2

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

$ awk 'FNR==NR{f[$1];next}(!($1 in f)) ' file2 file 
mango 
orange 
jackfruit 
grapes 
okra 
11

Вы можете сортировать файлы затем использовать 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 
+0

+1 Удивительный. Я решил это с нуля несколько раз за последние несколько лет и любил это встроенное решение, потому что теперь мне не нужно будет переносить сценарий. Может быть еще более упрощено, если файлы были предварительно удалены из синтаксиса <(...), чтобы избежать путаницы новичков – Vlueboy

+0

Это должен быть принятый ответ. – jaustin

3

1 Только один i nstance, в

  • cat File1 File2 | сортировать | уник -u

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

  • кот file1 file2 File2 | сортировать | уник -u

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

  • кошка File1 file1 file2 | сортировать | уник -u
+0

Это очень умно! – econ

0

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 

Надеюсь, он сработает для вас