Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Батник для сравнения 2-х текстовых файлов по строчно. (http://forum.oszone.net/showthread.php?t=258722)

ppt_ 16-04-2013 10:22 2133535

Батник для сравнения 2-х текстовых файлов по строчно.
 
Всем привет!
Нужен батник для сравнения 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 2136568

Код:

1>3.txt findstr /v /g:1.txt 2.txt

ppt_ 22-04-2013 14:55 2137594

Цитата:

Цитата Foreigner
Код:
1>3.txt findstr /v /g:1.txt 2.txt »

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

Foreigner 22-04-2013 17:50 2137717

Никогда не доводилось работать с такими длинными строками с помощью 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


Время: 19:05.

Время: 19:05.
© OSzone.net 2001-