Войти

Показать полную графическую версию : Батник для сравнения 2-х текстовых файлов по строчно.


ppt_
16-04-2013, 10:22
Всем привет!
Нужен батник для сравнения 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 но она выдает немного не тот результат, который хотелось бы получить...

Foreigner
20-04-2013, 21:21
1>3.txt findstr /v /g:1.txt 2.txt

ppt_
22-04-2013, 14:55
Код:
1>3.txt findstr /v /g:1.txt 2.txt »

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

Foreigner
22-04-2013, 17:50
Никогда не доводилось работать с такими длинными строками с помощью findstr.exe

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

compare-object $(gc 1.txt) $(gc 2.txt) | % {

if ( $_.sideindicator -eq "=>" ) { $_.inputobject }

} | out-file -encoding "default" 3.txt
Или с помощью grep (http://gnuwin32.sourceforge.net/packages/grep.htm)

1>3.txt grep -vUf 1.txt 2.txt




© OSzone.net 2001-2012