CMD/BAT - Батник для сравнения 2-х текстовых файлов по строчно.

Ответить
Аватара пользователя
ppt_

CMD/BAT - Батник для сравнения 2-х текстовых файлов по строчно.

Сообщение ppt_ »

Всем привет!

Нужен батник для сравнения 2-х текстовых файлов по строчно и вывод различий в отдельный файл.



Например:

Есть 2 текстовых файла (1.txt , 2.txt)



1.txt:

CLIENT=1 LIMIT=100

CLIENT=2 LIMIT=200

CLIENT=3 LIMIT=300



2.txt:

CLIENT=1 LIMIT=100

CLIENT=2 LIMIT=250

CLIENT=3 LIMIT=350



Нужно прочитать эти 2 файла, найти изменения и создать файл 3.txt

Который выглядел бы так:



3.txt:

CLIENT=2 LIMIT=250

CLIENT=3 LIMIT=350



И как быть в тех случаях когда строчки могут быть смещены:

1.txt:

CLIENT=1 LIMIT=100

CLIENT=10 LIMIT=500

CLIENT=2 LIMIT=200

CLIENT=3 LIMIT=300



2.txt:

CLIENT=1 LIMIT=100

CLIENT=2 LIMIT=250

CLIENT=3 LIMIT=350

CLIENT=10 LIMIT=500



Ведь результат должен получиться тотже:

3.txt:

CLIENT=2 LIMIT=250

CLIENT=3 LIMIT=350



PS. Есть конечно программа DiffText , она сравнивает два файла и выделяет отличия, но хотелось автоматизировать процесс ))

Пробовал fc но она выдает немного не тот результат, который хотелось бы получить...
Аватара пользователя
ppt_

Re: CMD/BAT - Батник для сравнения 2-х текстовых файлов по строчно.

Сообщение ppt_ »

Цитата Foreigner:



Код:

1>3.txt findstr /v /g:1.txt 2.txt
CMD/BAT - Батник для сравнения 2-х текстовых файлов по строчно.




Работает, коротко и просто )

Но, столкнулся вот с какой проблемой, подложил боевой файл и получил ошибку FINDSTR: Слишком длинная строка поиска. Стал экспериментировать и получается что если строка длиннее 127 символов возникает ошибка. Возможно както обойти это ограничение?
Аватара пользователя
Foreigner

Re: CMD/BAT - Батник для сравнения 2-х текстовых файлов по строчно.

Сообщение Foreigner »

Никогда не доводилось работать с такими длинными строками с помощью findstr.exe



Попробуйте с помощью PowerShell:



Код:

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

compare-object $(gc 1.txt) $(gc 2.txt) | % { 
    if ( $_.sideindicator -eq "=>" ) { $_.inputobject }
} | out-file -encoding "default" 3.txt

Или с помощью
grep




Код:

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

1>3.txt grep -vUf 1.txt 2.txt
Ответить

Вернуться в «Скриптовые языки администрирования Windows»