2013-03-06 6 views
1

У меня следующая ситуация:Найти разницу между двумя файлами

file1.dat походит:

1 2 
1 3 
1 4 
2 1 

и тому file2.dat, как:

1 2 
2 1 
2 3 
3 4 

Я хочу найти различия между вторым файлом с первого. Я пробовал wit grep -v -f file1 file2, но мои реальные файлы больше, чем эти два, и когда я пытался с ним, оболочка никогда не заканчивалась, это работа.

Результат должен быть:

2 3 
3 4 

Файлы сортируются и они имеют одинаковое число элементов. Любой способ найти решение с awk?

+0

Можно создать дубликат: http://stackoverflow.com/questions/ 8181974/compare-two-files-with-awk-or-sed – halex

+0

все строки, которые в файле2.dat не существуют в файле1.dat –

+0

почему '1 3' не в результате? он находится в файле1, но не в файле2. это правильно? – Kent

ответ

10

Похоже, вы хотите линии в file2, которые не в file1:

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

Однако проще использовать comm:

$ comm -13 file1 file2 
2 3 
3 4 
+0

+1 за подсказку – anubhava

+0

почему -13? что это значит? –

+4

Прочтите 'man comm'' -1', чтобы подавить строки, уникальные для файла 1 и' -3', чтобы подавить линии, общие для обоих. В результате единственные строки в файле2 оставляют только строки. –

Смежные вопросы