Войти

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


Amonius
29-04-2017, 15:58
Нужен батник для сравнения от 2 до 20 текстовых файлов построчно и вывод одинаковых строк в отдельный файл.

Например:
Есть от 2 до 20 текстовых файла (1.txt , 2.txt , 3.txt , 4.txt , 5.txt , 6.txt , 7.txt и т.д.)

1.txt:
28583 optimistka
243948 Laviza
120273 Екатеринао
15255 Irka14
99661 Danna
184263 VVK15
9400 Serpent777
9185 Medvedica

2.txt:
99661 Danna
28583 optimistka
243948 Laviza
120273 Екатеринао
211000 Lada002
32305 AngelLove

Требуется сравнение содержимого, выявить схожее содержание строки не взирая на её смещение и сохранить их в новом результат.txt

99661 Danna
28583 optimistka
243948 Laviza
120273 Екатеринао

Для примера приведены 2.txt желательна возможность сравнивать от 2 до 20 txt
Можно CMD или PowerShell

Iska
29-04-2017, 21:39
Amonius, упакуйте образцы не менее трёх файлов в архив и приложите к сообщению, либо выложите на RGhost или Яндекс.Диск.

Не очень понятно, что Вы хотите получить. Сначала пишете одно:
и вывод различий в отдельный файл »
затем противоположное:
выявить схожее содержание строки не взирая на её смещение и сохранить их в новом результат.txt »
Поясните. Также уточните — сравнение файлов общее групповое или каждого с каждым попарно? То есть, например, если мы ищем совпадение, то оно должно присутствовать: в первом случае — во всех файлах, во втором случае — достаточно присутствия в каких-нибудь двух файлах.

Amonius
29-04-2017, 22:06
Iska, Благодарю за коррективу.
Пояснение. в первом случае — во всех файлах
Ссылка на файлы. https://yadi.sk/d/Uy1kn97J3HUri5

Iska
30-04-2017, 00:39
Amonius, Вы не всё пояснили. Вам потребны различия или совпадения?

Предположим, интересуют совпадения. Берёте Log Parser 2.2 (https://technet.microsoft.com/en-us/scriptcenter/dd919274.aspx), устанавливаете. Для просмотра «глазками» используете, например, такой код:
"C:\Program Files (x86)\Log Parser 2.2\LogParser.exe" "SELECT Field1 AS Line, COUNT(*) AS Total FROM 'C:\Мои проекты\0068\00*.txt' GROUP BY Field1 HAVING Total > 1" -i:CSV -headerRow:OFF -iCodepage:65001 -oCodepage:866 -rtp:-1
где: "C:\Program Files (x86)\Log Parser 2.2\LogParser.exe" — путь к установленному приложению, 'C:\Мои проекты\0068\00*.txt' — путь и маска к исходным файлам.

Для получения результата в файл:
"C:\Program Files (x86)\Log Parser 2.2\LogParser.exe" "SELECT Field1 AS Line FROM 'C:\Мои проекты\0068\00*.txt' GROUP BY Field1 HAVING COUNT(*) > 1" -i:CSV -headerRow:OFF -iCodepage:65001 -oCodepage:65001 -q:ON >"Result.txt"


Можно, разумеется, и PowerShell задействовать. Для PowerShell 5.0, посмотреть:
Get-Content -Path 'C:\Мои проекты\0068\00*.txt' -Encoding UTF8 | Group-Object | Where-Object Count -gt 1 | Select-Object -ExpandProperty Name
Вывод в файл:
Get-Content -Path 'C:\Мои проекты\0068\00*.txt' -Encoding UTF8 | Group-Object | Where-Object Count -gt 1 | Select-Object -ExpandProperty Name | Set-Content -Path 'Result.txt' -Encoding UTF8

Amonius
30-04-2017, 02:10
Iska, Совпадения из всех документов.

Iska
30-04-2017, 02:19
Amonius, тогда пробуйте. Код я привёл.




© OSzone.net 2001-2012