Сравнение файлов, sdiff режит строки

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Grih65kop
Сообщения: 145

Сравнение файлов, sdiff режит строки

Сообщение Grih65kop »

Задача: сравнить файлы и найти в них изменения.

Структура файлов:

1.txt

Код: Выделить всё

e7f18694113c504d96f338610f7d74b4  ./forum/showpost.php
b154b0bdd10546dce45df39db9107c12  ./forum/login.php
258ae02dadf07728122110e7d4805086  ./forum/member_inlinemod.php
049346916619626250875b47e93fe533  ./forum/picturecomment.php
a1ec573c881714eb514b2a9253bb7d9b  ./forum/report.php
v0a1ad3c358ee4a4415qf0ea19e4046f  ./forum/group.php
g9f11ed65387743aea011411ah1f3c5f  ./forum/images/statusicon/thread_dot_hot_lock_new.gif


2.txt

Код: Выделить всё

258ae02dadf07728122110e7d4805086  ./forum/member_inlinemod.php
g61ba212e6868f3d4b0t432435173c74  ./forum/picturecomment.php
a1ec573c881714eb514b2a9253bb7d9b  ./forum/report.php
b154b0bdd10546dce45df39db9107c12  ./forum/login.php
v9f17ed67487119aea011013ab1f3b2a  ./forum/images/statusicon/thread_dot_hot_lock_new.gif
7727bd29w0dab41dhb84f54a327bebb5  ./forum/group.php
e7f18694113c504d96f338610f7d74b4  ./forum/showpost.php


Делаю следующим образом:

Код: Выделить всё

sort ./1.txt -t ' ' -k2 > 11.txt
sort ./2.txt -t ' ' -k2 > 22.txt

Отсортировываю структуру файлов по второму столбцу.


Код: Выделить всё

sdiff 11.txt 22.txt > end.txt

Получаем отчет.

Код: Выделить всё

v0a1ad3c358ee4a4415qf0ea19e4046f  ./forum/group.php          |    7727bd29w0dab41dhb84f54a327bebb5  ./forum/group.php
g9f11ed65387743aea011411ah1f3c5f  ./forum/images/statusicon/t |    v9f17ed67487119aea011013ab1f3b2a  ./forum/images/statusicon/t
b154b0bdd10546dce45df39db9107c12  ./forum/login.php        b154b0bdd10546dce45df39db9107c12  ./forum/login.php
258ae02dadf07728122110e7d4805086  ./forum/member_inlinemod.ph    258ae02dadf07728122110e7d4805086  ./forum/member_inlinemod.ph
049346916619626250875b47e93fe533  ./forum/picturecomment.php  |    g61ba212e6868f3d4b0t432435173c74  ./forum/picturecomment.php
a1ec573c881714eb514b2a9253bb7d9b  ./forum/report.php        a1ec573c881714eb514b2a9253bb7d9b  ./forum/report.php
e7f18694113c504d96f338610f7d74b4  ./forum/showpost.php        e7f18694113c504d96f338610f7d74b4  ./forum/showpost.php


Т.е. видно что происходит обрезание длинных строк на выходе при сравнении.
Как быть, лечить?
Можно ли сократить сам процесс, присутствуют ли ошибки с моей стороны? Возможно есть более приятные решения.
Спасибо.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5404
ОС: Gentoo

Re: Сравнение файлов, sdiff режит строки

Сообщение /dev/random »

Двухколоночный формат обычно используется для чтения человеком, и обрезание длинных строк здесь, в общем-то, естественно. Как вы будете использовать этот дифф, может быть тут лучше выбрать другой формат?
Спасибо сказали:
Grih65kop
Сообщения: 145

Re: Сравнение файлов, sdiff режит строки

Сообщение Grih65kop »

/dev/random писал(а):
30.07.2010 17:32
Двухколоночный формат обычно используется для чтения человеком, и обрезание длинных строк здесь, в общем-то, естественно. Как вы будете использовать этот дифф, может быть тут лучше использовать другой формат?

у меня есть какие то другие варианты? Просто я не знаю другого способа что бы сравнить содержания.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5404
ОС: Gentoo

Re: Сравнение файлов, sdiff режит строки

Сообщение /dev/random »

Grih65kop писал(а):
30.07.2010 17:35
у меня есть какие то другие варианты? Просто я не знаю другого способа что бы сравнить содержания.

Да. "sdiff" - это просто сокращённый вариант для "diff --side-by-side". При этом diff поддерживает множество других форматов, см. man diff
Спасибо сказали:
Grih65kop
Сообщения: 145

Re: Сравнение файлов, sdiff режит строки

Сообщение Grih65kop »

К сожалению, ничего конкретного и удобного для работы с большим списком не было найдено. Приведите, пожалуйста, по возможности примеры.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5404
ОС: Gentoo

Re: Сравнение файлов, sdiff режит строки

Сообщение /dev/random »

Выбирайте:

Shell

$ diff 1.txt 2.txt 1,2c1,2 < v0a1ad3c358ee4a4415qf0ea19e4046f ./forum/group.php < g9f11ed65387743aea011411ah1f3c5f ./forum/images/statusicon/thread_dot_hot_lock_new.gif --- > 7727bd29w0dab41dhb84f54a327bebb5 ./forum/group.php > v9f17ed67487119aea011013ab1f3b2a ./forum/images/statusicon/thread_dot_hot_lock_new.gif 5c5 < 049346916619626250875b47e93fe533 ./forum/picturecomment.php --- > g61ba212e6868f3d4b0t432435173c74 ./forum/picturecomment.php $ diff 1.txt 2.txt -u --- 1.txt 2010-07-30 18:45:34.563684786 +0400 +++ 2.txt 2010-07-30 18:45:42.249720517 +0400 @@ -1,7 +1,7 @@ -v0a1ad3c358ee4a4415qf0ea19e4046f ./forum/group.php -g9f11ed65387743aea011411ah1f3c5f ./forum/images/statusicon/thread_dot_hot_lock_new.gif +7727bd29w0dab41dhb84f54a327bebb5 ./forum/group.php +v9f17ed67487119aea011013ab1f3b2a ./forum/images/statusicon/thread_dot_hot_lock_new.gif b154b0bdd10546dce45df39db9107c12 ./forum/login.php 258ae02dadf07728122110e7d4805086 ./forum/member_inlinemod.php -049346916619626250875b47e93fe533 ./forum/picturecomment.php +g61ba212e6868f3d4b0t432435173c74 ./forum/picturecomment.php a1ec573c881714eb514b2a9253bb7d9b ./forum/report.php e7f18694113c504d96f338610f7d74b4 ./forum/showpost.php $ diff 1.txt 2.txt -c *** 1.txt 2010-07-30 18:45:34.563684786 +0400 --- 2.txt 2010-07-30 18:45:42.249720517 +0400 *************** *** 1,7 **** ! v0a1ad3c358ee4a4415qf0ea19e4046f ./forum/group.php ! g9f11ed65387743aea011411ah1f3c5f ./forum/images/statusicon/thread_dot_hot_lock_new.gif b154b0bdd10546dce45df39db9107c12 ./forum/login.php 258ae02dadf07728122110e7d4805086 ./forum/member_inlinemod.php ! 049346916619626250875b47e93fe533 ./forum/picturecomment.php a1ec573c881714eb514b2a9253bb7d9b ./forum/report.php e7f18694113c504d96f338610f7d74b4 ./forum/showpost.php --- 1,7 ---- ! 7727bd29w0dab41dhb84f54a327bebb5 ./forum/group.php ! v9f17ed67487119aea011013ab1f3b2a ./forum/images/statusicon/thread_dot_hot_lock_new.gif b154b0bdd10546dce45df39db9107c12 ./forum/login.php 258ae02dadf07728122110e7d4805086 ./forum/member_inlinemod.php ! g61ba212e6868f3d4b0t432435173c74 ./forum/picturecomment.php a1ec573c881714eb514b2a9253bb7d9b ./forum/report.php e7f18694113c504d96f338610f7d74b4 ./forum/showpost.php $ diff 1.txt 2.txt -e 5c g61ba212e6868f3d4b0t432435173c74 ./forum/picturecomment.php . 1,2c 7727bd29w0dab41dhb84f54a327bebb5 ./forum/group.php v9f17ed67487119aea011013ab1f3b2a ./forum/images/statusicon/thread_dot_hot_lock_new.gif . $ diff 1.txt 2.txt -n d1 2 a2 2 7727bd29w0dab41dhb84f54a327bebb5 ./forum/group.php v9f17ed67487119aea011013ab1f3b2a ./forum/images/statusicon/thread_dot_hot_lock_new.gif d5 1 a5 1 g61ba212e6868f3d4b0t432435173c74 ./forum/picturecomment.php

Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Сравнение файлов, sdiff режит строки

Сообщение sash-kan »

возможно, проще будет зайти не с конца, а с начала.
т.е., с какой целью вообще всё это сравнение двух текстовых файлов затевается? может быть, сравнивать нужно не эти два файла, а те самые showpost.php, login.php и т.д.?
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Grih65kop
Сообщения: 145

Re: Сравнение файлов, sdiff режит строки

Сообщение Grih65kop »

sash-kan писал(а):
30.07.2010 19:43
возможно, проще будет зайти не с конца, а с начала.
т.е., с какой целью вообще всё это сравнение двух текстовых файлов затевается? может быть, сравнивать нужно не эти два файла, а те самые showpost.php, login.php и т.д.?

Что бы выявить какие либо изменения в этих самых файлах.
Данные снимает md5sum, затем они проверяются с базой.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Сравнение файлов, sdiff режит строки

Сообщение sash-kan »

если нужно выявить факт изменения, так используйте md5sum по назначению:

$ touch 1 2 3
$ md5sum * > ../sums
$ cat ../sums
d41d8cd98f00b204e9800998ecf8427e 1
d41d8cd98f00b204e9800998ecf8427e 2
d41d8cd98f00b204e9800998ecf8427e 3
$ echo test > 1
$ md5sum -c ../sums
1: FAILED
2: OK
3: OK
md5sum: WARNING: 1 of 3 computed checksums did NOT match
$
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Grih65kop
Сообщения: 145

Re: Сравнение файлов, sdiff режит строки

Сообщение Grih65kop »

sash-kan писал(а):
30.07.2010 20:41
если нужно выявить факт изменения, так используйте md5sum по назначению:

$ touch 1 2 3
$ md5sum * > ../sums
$ cat ../sums
d41d8cd98f00b204e9800998ecf8427e 1
d41d8cd98f00b204e9800998ecf8427e 2
d41d8cd98f00b204e9800998ecf8427e 3
$ echo test > 1
$ md5sum -c ../sums
1: FAILED
2: OK
3: OK
md5sum: WARNING: 1 of 3 computed checksums did NOT match
$


В такой случаи файл который появился после снятия первой суммы при проверку во второй раз останется не заметным т.к. отсутствует в списке.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Сравнение файлов, sdiff режит строки

Сообщение sash-kan »

что мешает его внести в список?

p.s. собственно интересно, чем вас diff не устраивает? чем вас rsync --list-only не устраивает? чем вас, в конце концов, git status не устраивает? почему именно контрольные суммы (да ещё и столь долго вычислимые)?
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали: