Войти

Показать полную графическую версию : Удалить дубликаты в файле csv


tasix
28-04-2023, 02:02
Здравствуйте!
В программе Notepad++
Есть файл csv, он хоть и длинный, но я приведу коротким пример.
Нужно удалить дубликаты, но оставить по два или три дубля. То есть не все дубликаты, всё-то легко, а оставить несколько (сколько мне нужно)
Вот в таком файле

"doors-k.kam@yandex.ru";"Дизайн интерьеров";
"info@impressdesign.ru";"Дизайн интерьеров";
"your.design2016@yandex.ru";"Дизайн интерьеров";
"info@zs-ural.ru";"Дизайн интерьеров";
"info@euroluster.ru";"Дизайн интерьеров";
"3834114@mail.ru";"Дизайн интерьеров";
"dioscolor@yandex.ru";"Промышленный дизайн";
"info@dredz.ru";"Промышленный дизайн";
"asya.kuzina@gmail.com";"Промышленный дизайн";
"bocharovvictor@yandex.ru, bocharovaelena82@yandex.ru";"Промышленный дизайн";
"veragueppa@mail.ru";"Промышленный дизайн";
"laduga@laduga.com, caddex@caddex.eu";"Промышленный дизайн";
"shkalikov.dv@gmail.com";"Промышленный дизайн";
"service@soniko-n.ru";"Промышленный дизайн";

Тут видно, что повторяются слова Дизайн интерьеров и Промышленный дизайн.
Как мне оставить по два дубликата?

Sham
28-04-2023, 07:32
Можно использовать hashtable для счётчиков. На powershell с импортом-экспортом наверное проще будет.

$ht = @{}
$delim = ';'
$max = 2
$csv = 'file.csv'
Import-Csv -Path $csv -Delimiter $delim -Header 'mail', 'item' |
Where-Object { ++$ht[$_.item] -le $max} |
Export-Csv -Path ($csv -replace '(\.\w+)$', '_removed$1') -Encoding 'Default' -Delimiter $delim -NoTypeInformation

кладёт изменённый файл в той же папке.

tasix
28-04-2023, 08:47
Такие задачи просто через регулярные выражения не решаются?

Sham
28-04-2023, 09:14
через регулярные выражения »
в Notepad++ ? У csv свой формат, который сложно учитывать в регулярном выражении. В любом случае нужно как-то считать количество совпадений по строке.

tasix
28-04-2023, 11:53
Спасибо за ответы




© OSzone.net 2001-2012