2013-08-05 3 views
15

Я хочу найти разницу между двумя файлами, а затем поставить только различия в третьем файле. Я видел разные подходы, используя awk, diff и comm. Есть ли еще?Самый быстрый способ найти различия между двумя файлами в unix?

например. Compare two files line by line and generate the difference in another file

например. Copy differences between two files in unix

Мне нужно знать, что самый быстрый способ найти все различия и перечисления их в файле для каждого из приведенных ниже случаев -

Case 1 - file2 = file1 + extra text appended. 
Case 2 - file2 and file1 are different. 
+7

, так как это зависит от ваших ресурсов, то Лучше всего настало время самому себе – perreal

+0

не могли бы вы сделать ваши дела более конкретными и, возможно, дать пример кода, который вы пробовали? – asf107

+1

Для случая 2 существует 'cmp', который сравнивает два байта по байтам. – micke

ответ

39

Вы можете попробовать ..

comm -13 <(sort file1) <(sort file2) > file3 

или

grep -Fxvf file1 file2 > file3 

или

diff file1 file2 | grep "<" | sed 's/^<//g' > file3 

или

join -v 2 <(sort file1) <(sort file2) > file3 
+0

Да, но какой из них был бы самым быстрым? – Steam

+1

Используя два больших текстовых файла, где у вас есть дополнительный абзац текста в начале, я приурочил все четыре метода. Методы grep, diff и join не смогли найти дополнительный абзац. Методам diff необходимо использовать grep «>» в ​​дополнение к «<» для работы. Я не знаком с методами grep или join. Результаты: comm: 3.661s, grep: 0.035s, diff: 0.051s, join: 3.811s –

+1

@JasonHartley Получите помощника по жизни, есть только так много способов, которыми эти команды могли быть написаны. Кроме того, ответ, который вы избегаете, имеет одну команду, в которой я предоставил несколько. – danmc

1

Вы могли бы также попытаться включить md5-хеш-суммы или аналогичные действительно определяют, есть ли какие-либо различия на всех. Тогда, только сравнивать файлы, которые имеют разные хэши ...

+0

как я могу это сделать? – Steam

+0

Но хеширует два файла быстрее, чем сравнение двух файлов? –

8

Другой вариант:

sort file1 file2 | uniq -u > file3 

Если вы хотите видеть только дублированные записи используйте "уник -d" вариант:

sort file1 file2 | uniq -d > file3 
0

Это будет работать быстро:

Case 1 - File2 = File1 + добавленный дополнительный текст.

Grep -Fxvf file2.txt FILE1.TXT >> file3.txt

Файл 1: 80 Линии Файл 2: 100 линий Файл 3: 20 Линии

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