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

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Удалить дубликаты в файле csv (http://forum.oszone.net/showthread.php?t=353486)

tasix 28-04-2023 02:02 3008245

Удалить дубликаты в файле csv
 
Здравствуйте!
В программе 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 3008252

Можно использовать 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 3008258

Такие задачи просто через регулярные выражения не решаются?

Sham 28-04-2023 09:14 3008260

Цитата:

Цитата tasix
через регулярные выражения »

в Notepad++ ? У csv свой формат, который сложно учитывать в регулярном выражении. В любом случае нужно как-то считать количество совпадений по строке.

tasix 28-04-2023 11:53 3008272

Спасибо за ответы


Время: 20:36.

Время: 20:36.
© OSzone.net 2001-