PDA

Показать полную графическую версию : [решено] Сравнивание двух файлов .csv и удаление дублей


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

Iska
17-10-2012, 20:03
XXXp, уточните — Вам надо оставить строки, содержащие домены или оставить только домены?

XXXp
17-10-2012, 21:49
Прошу прощения, задача, как оказалось, больше не актуальна. Теперь необходима такая вещь:
есть два файла: 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
Compare-Object (gc 1.csv) (gc 2.csv) -PassThru | Where {$_.SideIndicator -eq "=>"} | Out-File 3.csv

XXXp
18-10-2012, 02:14
Спасибо, но почему-то не работает, ошибка. The term is not recognized as cmdlet и т.д...

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

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

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

Kazun
18-10-2012, 13:21
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
Файл 1.csv -http://rusfolder.com/33181055
Файл 2.csv -http://rusfolder.com/33181056

Kazun
18-10-2012, 14:00
$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
а есть возможность брать только по первому столбцу (домену), а то если меняется 2-й столбец, который неактуален, он тоже берет это как уникальную запись! Спасибо!

Kazun
18-10-2012, 14:15
$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
Спасибо огромнейшее! Все работает как нужно!




© OSzone.net 2001-2012