2016-03-28 7 views
2

У меня есть два больших файла, значения поплавков 9600000 написаны по одному с помощью кода C. Я знаю, что они похожи, они должны быть на самом деле одинаковыми. Как их сравнить и посмотреть, есть ли разница? Я попыталсяКак сравнить два больших файла в Linux?

diff --unchanged-group-format='' base.txt base4.txt 

Но это не работает, он печатает второй файл на экране.

С

cmp base.txt base4.txt 
base.txt base4.txt differ: byte 811221, line 62402 

что это означает, что 62402 линии отличаются?

+1

'man cmp' (filler) –

+1

Просто используйте' cmp'. –

+0

Вы действительно хотите увидеть различия, если они есть, или вы просто хотите знать, отличаются ли они, не видя разницы? Если вы просто хотите узнать, разные ли они, просто выполните: 'cmp base.txt base4.txt'. Кроме того, это не вопрос программирования, поэтому лучше переместить его на сайт SuperUser. –

ответ

2

Выход из cmp означает, что первое различие между файлами находится в позиции байта 811221 в файлах, которые находятся в строке 62402. Например, если два файла:

abcd 
1234 
wxyz 
9876 

и

abcd 
1234 
wqyz 
9812 

выход:

file1.txt file2.txt differ: char 12, line 3 

потому, что на линии 3 один файл имеет x, а другой файл имеет q, и они находятся в байтовой позиции 12 (символы новой строки включены в число байтов).

Если вы хотите увидеть все различия, используйте опцию -l.

$ cmp -l file1.txt file2.txt 
12 170 161 
18 67 61 
19 66 62 

Обратите внимание, что в отличие от diff, это не смекалку вставок и удалений, он просто сравнивает каждый байт в каждой позиции. Поэтому, если вы вставляете или удаляете символ в начале файла, все после этого будет отображаться как несоответствие.

+0

Хорошо, но как продолжить до конца файла? –

+0

@RichardRublev: Продолжить и что-то делать, точно? 'cmp' уже сказал вам, что они различаются. Какую дополнительную информацию вы хотите? (Я не отклоняю вашу проблему, просто прошу вас уточнить это.) –

+0

@RichardRublev Я добавил параметр '-l', чтобы показать все несоответствия, а не только первые. – Barmar