Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Сравнение 2 файлов

Ответить
Настройки темы
PowerShell - [решено] Сравнение 2 файлов

Новый участник


Сообщения: 34
Благодарности: 0

Профиль | Отправить PM | Цитировать


Возникла необходимость сравнение 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

А при нахождении двух ФИО идентичных записать ошибку в отдельный файл с указанием ФИО.

Отправлено: 11:28, 14-12-2016

 

Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Цитата Johny_spb:
Есть 2 файла, в виде: »
Желателен не вид, а архив с образцами файлов.

Цитата Johny_spb:
сравнить 2 файла построчно »
Первую строку одного файла с первой строкой другого файла, вторую строку одного файла со второй строкой другого файла… и так далее?

Цитата Johny_spb:
А при нахождении двух ФИО идентичных »
Это как? Где «нахождении»?
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:53, 14-12-2016 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 34
Благодарности: 0

Профиль | Отправить PM | Цитировать


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 файл

А если идет полное совпадении записывается в отделенный файл как ошибка

Отправлено: 13:04, 14-12-2016 | #3


Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Johny_spb, повторю:
Цитата Iska:
Желателен не вид, а архив с образцами файлов. »
«Секретные» данные, буде таковые, можете заменить.

Цитата Johny_spb:
ФИО первого пользователя из 1 файла (Петров Петор Петрович) найти его во втором файле »
Ага, уже лучше. Имеем текстовую базу данных в первом приближении. Осталось разобраться с типом связи.

Цитата Johny_spb:
А если идет полное совпадении записывается в отделенный файл как ошибка »
Что такое «полное совпадение»? Это никак не пояснило ситуацию с:
Цитата Johny_spb:
А при нахождении двух ФИО идентичных записать ошибку в отдельный файл с указанием ФИО. »
Где «нахождение», где «идентичных»?

Короче говоря: выкладывайте архив с образцами исходных файлов, с результирующим файлом и с «отделенный файл как ошибка», которые должны получиться в итоге обработки.
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:34, 14-12-2016 | #4


Новый участник


Сообщения: 34
Благодарности: 0

Профиль | Отправить PM | Цитировать


Вложения
Тип файла: rar doc.rar
(777 байт, 25 просмотров)

Файлы во вложении. Спасибо!

Отправлено: 15:40, 14-12-2016 | #5


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
$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
}
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:31, 14-12-2016 | #6


Новый участник


Сообщения: 34
Благодарности: 0

Профиль | Отправить PM | Цитировать


При попытке выполнить выдает ошибку =(

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

Отправлено: 09:18, 15-12-2016 | #7


Новый участник


Сообщения: 34
Благодарности: 0

Профиль | Отправить PM | Цитировать


Еще заметил что при создании файла результата появляются лишние "" (двойные кавычки)
"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,

Отправлено: 11:29, 15-12-2016 | #8


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
$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
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:12, 16-12-2016 | #9



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Сравнение 2 файлов

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Сравнение 2-х списков файлов Andrey947 Скриптовые языки администрирования Windows 1 24-03-2016 10:19
Сравнение текстовых файлов Speedy Программное обеспечение Windows 9 30-03-2015 02:42
Любой язык - Сравнение списка файлов и каталога с файлами с копированием файлов из каталога jastreb83 Скриптовые языки администрирования Windows 0 10-04-2013 09:56
Delphi - [решено] Сравнение файлов. Snake750 Программирование и базы данных 6 15-03-2010 00:42
Сравнение файлов Guest Программирование и базы данных 6 24-04-2004 04:47




 
Переход