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

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

XXXp 17-10-2012 18:19 2007307

Сравнивание двух файлов .csv и удаление дублей
 
есть два файла: 1.csv и 2.csv, необходимо, удалить из файла 2.csv все данные, точные копии которых есть в 1.csv.
Другими словами, файл 1.csv более старый, а 2.csv более новый, необходимо удалить неактуальные данные, которые содержатся уже в 1.csv и были обработаны ранее. В файле 2.csv должно после анализа остаться только новейшие данные, которых в 1.csv нет. Не подскажете, каким образом можно решить такую проблему? Спасибо за любую помощь!

Iska 17-10-2012 20:03 2007388

XXXp, уточните — Вам надо оставить строки, содержащие домены или оставить только домены?

XXXp 17-10-2012 21:49 2007467

Прошу прощения, задача, как оказалось, больше не актуальна. Теперь необходима такая вещь:
есть два файла: 1.csv и 2.csv, необходимо, удалить из файла 2.csv все данные, точные копии которых есть в 1.csv.
Другими словами, файл 1.csv более старый, а 2.csv более новый, необходимо удалить неактуальные данные, которые содержатся уже в 1.csv и были обработаны ранее. В файле 2.csv должно после анализа остаться только новейшие данные, которых в 1.csv нет. Не подскажете, каким образом можно решить такую проблему? Спасибо за любую помощь!

З.Ы. Каждый файл .csv весит ~5-6мб, т.е. содержит около 100 000 строк, после анализа должны остаться 3000-4000.

Kazun 17-10-2012 23:43 2007527

Compare-Object (gc 1.csv) (gc 2.csv) -PassThru | Where {$_.SideIndicator -eq "=>"} | Out-File 3.csv

XXXp 18-10-2012 02:14 2007584

Спасибо, но почему-то не работает, ошибка. The term is not recognized as cmdlet и т.д...

Iska 18-10-2012 04:10 2007593

XXXp, у меня работает. Упакуйте «1.csv» и «2.csv» в архив, выложите на обменник, ссылку — сюда.

Если там какая-либо конфиденциальная информация — архив под паролем, ссылку на архив и пароль в личку коллеге Kazun.

XXXp 18-10-2012 13:06 2007782

Прошу прощения, скрипт работает, у меня неправильно был выбран режим powershell
Только он делает не совсем то. Есть два файла 1.csv (более старый, обработанный) и 2.csv (новый, в котором 95% - дубли из 1.csv, которые ранее были обработаны). Необходимо создать такой файл 3.csv, который бы собрал в себя ТОЛЬКО те данные, которые есть в 2.csv, но нету в 1.csv. Цель - дважды не обрабатывать одни и те же данные. Спасибо!

Kazun 18-10-2012 13:21 2007785

Код:

PS Z:\> gc 1.csv
Name;LogonName;mail;Department
Name1;LogonName1;mail1;dp1
PS Z:\> gc 2.csv
Name;LogonName;mail;Department
Name1;LogonName1;mail1;dp1
Name2;LogonName2;mail2;dp2
PS Z:\> Compare-Object (gc 1.csv) (gc 2.csv) -PassThru | Where {$_.SideIndicator -eq "=>"}
Name2;LogonName2;mail2;dp2

Приводите примеры,не надо быть голословным.

XXXp 18-10-2012 13:32 2007792

Файл 1.csv -http://rusfolder.com/33181055
Файл 2.csv -http://rusfolder.com/33181056

Kazun 18-10-2012 14:00 2007804

Код:

$h = @{}
Get-Content 1.csv | Foreach {$h[$_]=1}
Get-Content 2.csv | Where {!$h[$_]} | Out-File 3.csv

У меня получилось 28979 уникальных записей.

PS. С Compare-Object было лень ждать.

XXXp 18-10-2012 14:05 2007806

а есть возможность брать только по первому столбцу (домену), а то если меняется 2-й столбец, который неактуален, он тоже берет это как уникальную запись! Спасибо!

Kazun 18-10-2012 14:15 2007812

Код:

$h = @{}
Get-Content 1.csv | Foreach {$h[$($_.split(";")[0])]=1}
Get-Content 2.csv | Where {!$h[$($_.split(";")[0])]} | Out-File 3.csv


XXXp 18-10-2012 14:19 2007815

Спасибо огромнейшее! Все работает как нужно!


Время: 10:11.

Время: 10:11.
© OSzone.net 2001-