Показать полную графическую версию : [решено] Сравнение 2 файлов
Johny_spb
14-12-2016, 11:28
Возникла необходимость сравнение 2 текстовых файлов и запись в третий файл данных из первого и второго. Кто может помогите, как это можно реализовать? PowerShell изучаю совсем не давно и таких навыков еще нет =( А теперь более подробно:
Есть 2 файла, в виде:
1. Файл
00005555;000000;Петров Петр Петрович
2. Файл
0000;0000;0000;0000;0000;0000;0000;0000;Петров Петр Петрович;PetrovPP
Необходимо следующее сравнить 2 файла построчно и при полном совпадении ФИО в 1 файле и ФИО во втором записать строку в третий файл совместив первое поле из первого файла и всю строку из второго в виде:
0000;0000;0000;0000;0000;0000;0000;0000;Петров Петр Петрович;PetrovPP;00005555
А при нахождении двух ФИО идентичных записать ошибку в отдельный файл с указанием ФИО.
Есть 2 файла, в виде: »
Желателен не вид, а архив с образцами файлов.
сравнить 2 файла построчно »
Первую строку одного файла с первой строкой другого файла, вторую строку одного файла со второй строкой другого файла… и так далее?
А при нахождении двух ФИО идентичных »
Это как? Где «нахождении»?
Johny_spb
14-12-2016, 13:04
1 файл
Выгрузка из AD
Путь к утечке, Петров Петор Петрович,PetrovPP
Путь к утечке, Петров1 Петор Петрович,Petrov1PP
Путь к утечке, Петров2 Петор Петрович,Petrov2PP
и т.д. (более 500 пользователей)
2 файл
0000000001;99996; Петров Петор Петрович;Контора;Адрес;Телефон
0000000002;99997; Петров1 Петор Петрович;Контора;Адрес;Телефон
0000000003;99998; Петров2 Петор Петрович;Контора;Адрес;Телефон
и т.д. (более 500 пользователей)
В результате необходимо взять ФИО первого пользователя из 1 файла (Петров Петор Петрович) найти его во втором файле и первый параметр из строчки записать и так по всем пользователям. т.е. в результате должно получаться:
Путь к утечке, Петров Петор Петрович,PetrovPP,0000000001
Путь к утечке, Петров1 Петор Петрович,Petrov1PP,0000000002
Путь к утечке, Петров2 Петор Петрович,Petrov2PP,0000000003
и это записывается в 3 файл
А если идет полное совпадении записывается в отделенный файл как ошибка
Johny_spb, повторю:
Желателен не вид, а архив с образцами файлов. »
«Секретные» данные, буде таковые, можете заменить.
ФИО первого пользователя из 1 файла (Петров Петор Петрович) найти его во втором файле »
Ага, уже лучше. Имеем текстовую базу данных в первом приближении. Осталось разобраться с типом связи.
А если идет полное совпадении записывается в отделенный файл как ошибка »
Что такое «полное совпадение»? Это никак не пояснило ситуацию с:
А при нахождении двух ФИО идентичных записать ошибку в отдельный файл с указанием ФИО. »
Где «нахождение», где «идентичных»?
Короче говоря: выкладывайте архив с образцами исходных файлов, с результирующим файлом и с «отделенный файл как ошибка», которые должны получиться в итоге обработки.
Johny_spb
14-12-2016, 15:40
Файлы во вложении. Спасибо!
$f1 = Import-Csv Фаил1.csv
$f2 = Import-Csv Фаил2.txt -Encoding Default -Header H1,H2,H3,H4,H5
$f2 | Foreach {$err = @()} {
$r = $f1 -match "$($_.H3) $($_.H4) $($_.H5)"
if($r.Count -eq 1) { $r[0].employeeNumber = $_.H1 }
if($r.Count -gt 1) { $err += $r[0].displayName}
} {
$err | Select -Uniq | Out-File error.txt
$f1 | Export-Csv -NoType rezult.txt -Encoding Unicode
}
Johny_spb
15-12-2016, 09:18
При попытке выполнить выдает ошибку =(
Import-Csv : Не удается найти параметр, соответствующий имени параметра "Encoding".
C:\Temp\scr.ps1:2 знак:33
+ $f2 = Import-Csv 2.txt -Encoding <<<< Default -Header H1,H2,H3,H4,H5
+ CategoryInfo : InvalidArgument: (:) [Import-Csv], ParameterBindingException
+ FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.ImportCsvCommand
Johny_spb
15-12-2016, 11:29
Еще заметил что при создании файла результата появляются лишние "" (двойные кавычки)
"DN","displayName","sAMAccountName","employeeNumber"
"CN=Petrov1PP,OU=40-Users,OU=St-Petersburg,DC=region,DC=cbr,DC=ru","Петров1 Петр Петрович","Petrov1PP",
"CN=Petrov2PP,OU=40-Users,OU=St-Petersburg,DC=region,DC=cbr,DC=ru","Петров2 Петр Петрович","Petrov2PP",
А необходимо:
DN,displayName,sAMAccountName,employeeNumber
"CN=Petrov1PP,OU=40-Users,OU=St-Petersburg,DC=region,DC=cbr,DC=ru",Петров1 Петр Петрович,Petrov1PP,
"CN=Petrov2PP,OU=40-Users,OU=St-Petersburg,DC=region,DC=cbr,DC=ru",Петров2 Петр Петрович,Petrov2PP,
$err = @()
$d = New-Object Collections.Specialized.OrderedDictionary
Get-Content Фаил1.csv | Foreach {
$i = $_.split(",")[-2]
if($d.Contains($i)) {
$err += $i
}
else {
$d.Add($i,$_)
}
}
Get-Content Фаил2.txt | ConvertFrom-Csv -Header H1,H2,H3,H4,H5 | Group {"$($_.H3) $($_.H4) $($_.H5)"} | Foreach {
$id = $_.Group[0].H1
$name = $_.Name
if($d["$name"]) {
$d["$name"] = $d["$name"] + ",$id"
}
}
$err | Out-File error.txt
$d.Values | Out-File rezult.txt
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.