|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [решено] Удаление дубликатов строк из текстового файла со сравнением по две строки |
|
Любой язык - [решено] Удаление дубликатов строк из текстового файла со сравнением по две строки
|
Старожил Сообщения: 216 |
Профиль | Отправить PM | Цитировать Доброго времени суток всем.
Знаю что тема уже изъезжена, но готового решения найти не получается. Есть плейлисты (по сути текстовые файлы), при их создании может получаться большое количество дублирующих строк. Например: #EXTINF:0, 1+1 http://193.106.211.2:1234/udp/225.1.1.103:4001 #EXTINF:0, ICTV http://193.106.211.2:1234/udp/225.1.1.104:4001 #EXTINF:0, 5 канал http://193.106.211.2:1234/udp/225.1.1.105:4001 #EXTINF:0, СТБ http://193.106.211.2:1234/udp/225.1.1.106:4001 #EXTINF:0, ТРК «Украина» http://193.106.211.2:1234/udp/225.1.1.107:4001 #EXTINF:0, Сити http://193.106.211.2:1234/udp/225.1.1.108:4001 #EXTINF:0, Тонис http://193.106.211.2:1234/udp/225.1.1.111:4001 #EXTINF:0, ТЕТ http://193.106.211.2:1234/udp/225.1.1.110:4001 #EXTINF:0, ТРК «Киев» http://193.106.211.2:1234/udp/225.1.1.114:4001 #EXTINF:0, Тонис http://193.106.211.2:1234/udp/225.1.1.111:4001 #EXTINF:0, Мега http://193.106.211.2:1234/udp/225.1.1.112:4001 #EXTINF:0, М1 http://193.106.211.2:1234/udp/225.1.1.113:4001 #EXTINF:0, канал «Киев» http://193.106.211.2:1234/udp/225.1.1.114:4001 #EXTINF:0, 2+2 http://193.106.211.2:1234/udp/225.1.1.115:4001 #EXTINF:0, ТРК «Украина» http://190.106.210.2:1234/udp/225.1.1.107:4001 Пересмотрел кучу различных скриптов, сам пробовал батники писать, но все они считывают по одной строке и в выходном файле может получится к названию канала несколько адресов или наоборот. К примеру такой батник: @echo off setlocal disableDelayedExpansion set "file=%~1" set "line=%file%.line" set "deduped=%file%.deduped" ::Define a variable containing a linefeed character set LF=^ ::The 2 blank lines above are critical, do not remove >"%deduped%" ( for /f usebackq^ eol^=^%LF%%LF%^ delims^= %%A in ("%file%") do ( set "ln=%%A" setlocal enableDelayedExpansion >"%line%" (echo !ln:\=\\!) >nul findstr /xlg:"%line%" "%deduped%" || (echo !ln!) endlocal ) ) >nul move /y "%deduped%" "%file%" 2>nul del "%line%" #EXTINF:-1 group-title="Познавательные",Brodilo.TV http://brodilo.tv/channel.php #EXTINF:-1 group-title="Познавательные",Da Vinci Learning http://hls.peers.tv/streaming/da_vinci/16/tvrecw/playlist.m3u8|User-Agent=DuneHD/1.0.3 http://194.28.155.10:81/udp/225.0.55.26:1234 #EXTINF:-1 group-title="Прочие каналы:",112 Украина #EXTINF:-1 group-title="Прочие каналы:",112 Украина HD http://112hd-hls3.cosmonova.net.ua/hls/112hd_ua_mid/index.m3u8 http://app.live.112.events/hls-ua/112hd_mid/index.m3u8 #EXTINF:-1 group-title="Прочие каналы:",112 Украина [FHD] #EXTINF:-1 group-title="Прочие каналы:",112 Україна #EXTINF:-1 group-title="Прочие каналы:",112 Україна HD #EXTINF:-1 group-title="Прочие каналы:",12 Канал (Омск) http://12channel.bonus-tv.ru:80/stream549837052987/tracks-v1a1/mono.m3u8 #EXTINF:-1 group-title="Познавательные",Discovery Channel http://st6.allplay.uz/iptv/4/index.m3u8 #EXTINF:-1 group-title="Познавательные",Discovery Channel HD http://st6.allplay.uz/iptv/74/index.m3u8 Другие скрипты делают аналогично. Они сравнивают по одной строке. Может кто подскажет как реализовать сравнивание строк попарно, чтобы не нарушалась структура плейлиста ? Премного буду благодарен за помощь. |
|
Отправлено: 23:26, 26-06-2019 |
Crazy Сообщения: 1171
|
Профиль | Отправить PM | Цитировать Цитата Fors1k:
m3u Цитата Fors1k:
Цитата Fors1k:
Вот, валидный и дополненный пример из поста выше: Пример...
#EXTM3U url-tvg="http://server/jtv.zip" cache=500 deinterlace=1 aspect-ratio=4:3 croppadd=10x10 tvg-shift=0 #EXTINF:-1 ,0 - FREE-IPTV /$USB_DIR/sda1/free_ip.m3u #EXTINF:-1 ,Первый канал #EXTGRP:Российские http://gorod.tv/s/live/1/46.252.219.59/1561632042766/0.m3u8 #EXTINF:-1 ,Россия 1 http://gorod.tv/s/live/2/46.252.219.59/1561632042766/0.m3u8 #EXTINF:-1 ,Матч ТВ http://gorod.tv/s/live/3/46.252.219.59/1561632042766/0.m3u8 #EXTINF:-1 ,НТВ http://gorod.tv/s/live/4/46.252.219.59/1561632042766/0.m3u8 #EXTINF:-1 ,Пятый канал http://gorod.tv/s/live/5/46.252.219.59/1561632042766/0.m3u8 Здесь какая-то информация http://gorod.tv/s/live/1/46.252.219.59/1561632042766/0.m3u8 #EXTINF:-1 ,Пятый канал #EXTINF:-1 ,Россия К #EXTGRP:Российские http://gorod.tv/s/live/6/46.252.219.59/1561632042766/0.m3u8 #EXTINF:-1 ,Москва 24 #EXTVLCOPT:http-user-agent=smartlabs http://91.231.219.145:80/tv_moscow_24/video.m3u8 #EXTINF:-1 ,Санкт-Петербург http://91.231.219.145:80/tv_sankt_peterburg/video.m3u8 https://smarttvnews.ru/wp-content/uploads/2018/11/BT-2016-logo_color7890.png https://smarttvnews.ru/wp-content/uploads/2018/11/BT-2016-logo_color7890.png #EXTINF:-1 ,Discovery http://hls-v3-spbtv.msk.spbtv.com/for_spb/msk/ipv3/154.m3u8 #EXTINF:-1 ,NASA TV http://hls-v3-spbtv.msk.spbtv.com/for_spb/msk/ipv3/17.m3u8 #EXTINF:-1 ,Россия 24 http://gorod.tv/s/live/7/46.252.219.59/1561632042766/0.m3u8 #EXTINF:-1 ,Карусель http://gorod.tv/s/live/8/46.252.219.59/1561632042766/0.m3u8 #EXTINF:-1 ,Первый канал #EXTGRP:Российские http://gorod.tv/s/live/1/46.252.219.59/1561632042766/0.m3u8 #EXTINF:-1 ,Россия 1 http://gorod.tv/s/live/2/46.252.219.59/1561632042766/0.m3u8 #EXTINF:-1 ,Матч ТВ http://gorod.tv/s/live/3/46.252.219.59/1561632042766/0.m3u8 #EXTINF:-1 ,НТВ http://gorod.tv/s/live/4/46.252.219.59/1561632042766/0.m3u8 #EXTINF:-1 ,Пятый канал http://gorod.tv/s/live/5/46.252.219.59/1561632042766/0.m3u8 Здесь какая-то информация http://gorod.tv/s/live/1/46.252.219.59/1561632042766/0.m3u8 #EXTINF:-1 ,Пятый канал #EXTINF:-1 ,Россия К #EXTGRP:Российские #EXTVLCOPT:http-user-agent=smartlabs http://gorod.tv/s/live/6/46.252.219.59/1561632042766/0.m3u8 #EXTINF:-1 ,Москва 24 http://91.231.219.145:80/tv_moscow_24/video.m3u8 #EXTINF:-1 ,Санкт-Петербург http://91.231.219.145:80/tv_sankt_peterburg/video.m3u8 https://smarttvnews.ru/wp-content/uploads/2018/11/BT-2016-logo_color7890.png https://smarttvnews.ru/wp-content/uploads/2018/11/BT-2016-logo_color7890.png #EXTINF:-1 ,Discovery http://hls-v3-spbtv.msk.spbtv.com/for_spb/msk/ipv3/154.m3u8 #EXTINF:-1 ,NASA TV http://hls-v3-spbtv.msk.spbtv.com/for_spb/msk/ipv3/17.m3u8 #EXTINF:-1 ,Россия 24 http://gorod.tv/s/live/7/46.252.219.59/1561632042766/0.m3u8 #EXTINF:-1 ,Карусель http://gorod.tv/s/live/8/46.252.219.59/1561632042766/0.m3u8 Цитата Fors1k:
И кстати, сортировку лучше не по ссылкам делать, ибо часто меняются, а по наименованиям каналов. |
||||
------- Отправлено: 09:10, 11-08-2020 | #41 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 193
|
Профиль | Отправить PM | Цитировать Цитата YuS_2:
Цитата YuS_2:
param( $pathIN = "C:\files\list.txt", $pathOUT = "C:\files\list_new.txt" )cls $List=((Get-Content $pathIN -Raw) -replace "#EXT[^I].+?`r`n",''| sls "#E[^#]+?(\.m3u.?|:\d{4})(?=`r|$)"-All).Matches.Value| sort{($_-split"`r`n")[1]} -u| sort{($_-split"`r`n")[0]} -u $List|out-file $pathOUT List4-OUT
#EXTINF:-1 ,0 - FREE-IPTV /$USB_DIR/sda1/free_ip.m3u #EXTINF:-1 ,Discovery http://hls-v3-spbtv.msk.spbtv.com/for_spb/msk/ipv3/154.m3u8 #EXTINF:-1 ,NASA TV http://hls-v3-spbtv.msk.spbtv.com/for_spb/msk/ipv3/17.m3u8 #EXTINF:-1 ,Карусель http://gorod.tv/s/live/8/46.252.219.59/1561632042766/0.m3u8 #EXTINF:-1 ,Матч ТВ http://gorod.tv/s/live/3/46.252.219.59/1561632042766/0.m3u8 #EXTINF:-1 ,Москва 24 http://91.231.219.145:80/tv_moscow_24/video.m3u8 #EXTINF:-1 ,НТВ http://gorod.tv/s/live/4/46.252.219.59/1561632042766/0.m3u8 #EXTINF:-1 ,Первый канал http://gorod.tv/s/live/1/46.252.219.59/1561632042766/0.m3u8 #EXTINF:-1 ,Пятый канал http://gorod.tv/s/live/5/46.252.219.59/1561632042766/0.m3u8 #EXTINF:-1 ,Россия 1 http://gorod.tv/s/live/2/46.252.219.59/1561632042766/0.m3u8 #EXTINF:-1 ,Россия 24 http://gorod.tv/s/live/7/46.252.219.59/1561632042766/0.m3u8 #EXTINF:-1 ,Россия К http://gorod.tv/s/live/6/46.252.219.59/1561632042766/0.m3u8 #EXTINF:-1 ,Санкт-Петербург http://91.231.219.145:80/tv_sankt_peterburg/video.m3u8 Цитата YuS_2:
Так что, видимо, надо сортировать по обоим параметрам. Теперь, по идее, будет работать для любых примеров. |
|||
Последний раз редактировалось Fors1k, 12-08-2020 в 13:54. Отправлено: 18:00, 11-08-2020 | #42 |
Старожил Сообщения: 216
|
Профиль | Отправить PM | Цитировать Цитата Fors1k:
Многие провайдеры интернета предоставляют своим пользователям и бесплатное ТВ по мультикасту. Нюансов там очень много, но тема не об этом... Sorry за оффтоп |
|
Отправлено: 20:23, 11-08-2020 | #43 |
Старожил Сообщения: 216
|
Профиль | Отправить PM | Цитировать Цитата YuS_2:
Но как сделать сортировку по имени канала, если в строке перед названием канала есть дополнительные директивы, к примеру: #EXTINF:0 group-title="Русские" tvg-id="rossia1" tvg-logo="https://pbs.twimg.com/media/DxnvslfWsAE6Sys.png",Россия 1 HD https://meta.vcdn.biz/30560520b9dacb6e03aae2bc57bd8d78_megogo/vod/fs/o/41139221/u_sid/0/u_uid/0/u_vod/0/u_device/cms_html5/u_srvc/28561/type.live/playlist.m3u8 #EXTINF:0 group-title="Русские" tvg-id="5kanal-ru" tvg-logo="https://pbs.twimg.com/media/DxnwycUX4AAaKJp.png",Пятый канал https://meta.vcdn.biz/bd7779421f9ce7a23453cb0fb05987a9_megogo/vod/fs/o/36429601/u_sid/0/u_uid/0/u_vod/0/u_device/cms_html5/u_srvc/28561/type.live/playlist.m3u8 #EXTINF:0 group-title="Русские" tvg-id="mir-premium" tvg-logo="https://pbs.twimg.com/media/DxnzHGTWsAMs6Cd.png",Мир Premium HD https://meta.vcdn.biz/7cb30d763564c992476e35512340ec89_megogo/vod/fs/o/28401691/u_sid/0/u_uid/0/u_vod/0/u_device/cms_html5/u_srvc/28561/type.live/playlist.m3u8 #EXTINF:0 group-title="Русские" tvg-id="otr" tvg-logo="https://pbs.twimg.com/media/DxnzY6kWsAESz3i.png",ОТР https://meta.vcdn.biz/6702b90d26a9893506c499d0af1d6a58_megogo/vod/fs/o/41139191/u_sid/0/u_uid/0/u_vod/0/u_device/cms_html5/u_srvc/28561/type.live/playlist.m3u8 #EXTINF:0 group-title="Русские" tvg-id="piatnica" tvg-logo="https://pbs.twimg.com/media/Dxnx_cSWsAETWIm.png",Пятница! https://meta.vcdn.biz/5b39f9d7689deb889ec1ee82c2c05328_megogo/vod/fs/o/16283521/u_sid/0/u_uid/0/u_vod/0/u_device/cms_html5/u_srvc/28561/type.live/playlist.m3u8 #EXTINF:0 group-title="Русские" tvg-id="match-tv" tvg-logo="https://pbs.twimg.com/media/Dxnv4yWW0AArM1C.png",Матч ТВ https://meta.vcdn.biz/fb2879b1db7b9774b142918ea4521488_megogo/vod/fs/o/36426601/u_sid/0/u_uid/0/u_vod/0/u_device/cms_html5/u_srvc/28561/type.live/playlist.m3u8 #EXTINF:0 group-title="Русские" tvg-id="tnt" tvg-logo="https://pbs.twimg.com/media/DxnwsTmWoAA5iYu.png",ТНТ https://meta.vcdn.biz/1ff4118dc0fefcbd3ce5ae5fdf2fc482_megogo/vod/fs/o/40500701/u_sid/0/u_uid/0/u_vod/0/u_device/cms_html5/u_srvc/28561/type.live/playlist.m3u8 #EXTINF:0 group-title="Русские" tvg-id="match-tv" tvg-logo="https://pbs.twimg.com/media/Dxnv4yWW0AArM1C.png",Матч ТВ https://meta.vcdn.biz/fb2879b1db7b9774b142918ea4521488_megogo/vod/fs/o/36426601/u_sid/0/u_uid/0/u_vod/0/u_device/cms_html5/u_srvc/28561/type.live/playlist.m3u8 #EXTINF:0 group-title="Русские" tvg-id="mir-premium" tvg-logo="https://pbs.twimg.com/media/DxnzHGTWsAMs6Cd.png",Мир Premium HD https://meta.vcdn.biz/7cb30d763564c992476e35512340ec89_megogo/vod/fs/o/28401691/u_sid/0/u_uid/0/u_vod/0/u_device/cms_html5/u_srvc/28561/type.live/playlist.m3u8 #EXTINF:0 group-title="Русские" tvg-id="otr" tvg-logo="https://pbs.twimg.com/media/DxnzY6kWsAESz3i.png",ОТР https://meta.vcdn.biz/6702b90d26a9893506c499d0af1d6a58_megogo/vod/fs/o/41139191/u_sid/0/u_uid/0/u_vod/0/u_device/cms_html5/u_srvc/28561/type.live/playlist.m3u8 #EXTINF:0 group-title="Русские" tvg-id="piatnica" tvg-logo="https://pbs.twimg.com/media/Dxnx_cSWsAETWIm.png",Пятница! https://meta.vcdn.biz/5b39f9d7689deb889ec1ee82c2c05328_megogo/vod/fs/o/16283521/u_sid/0/u_uid/0/u_vod/0/u_device/cms_html5/u_srvc/28561/type.live/playlist.m3u8 #EXTINF:0 group-title="Русские" tvg-id="5kanal-ru" tvg-logo="https://pbs.twimg.com/media/DxnwycUX4AAaKJp.png",Пятый канал https://meta.vcdn.biz/bd7779421f9ce7a23453cb0fb05987a9_megogo/vod/fs/o/36429601/u_sid/0/u_uid/0/u_vod/0/u_device/cms_html5/u_srvc/28561/type.live/playlist.m3u8 #EXTINF:0 group-title="Русские" tvg-id="rossia1" tvg-logo="https://pbs.twimg.com/media/DxnvslfWsAE6Sys.png",Россия 1 HD https://meta.vcdn.biz/30560520b9dacb6e03aae2bc57bd8d78_megogo/vod/fs/o/41139221/u_sid/0/u_uid/0/u_vod/0/u_device/cms_html5/u_srvc/28561/type.live/playlist.m3u8 #EXTINF:0 group-title="Русские" tvg-id="tnt" tvg-logo="https://pbs.twimg.com/media/DxnwsTmWoAA5iYu.png",ТНТ https://meta.vcdn.biz/1ff4118dc0fefcbd3ce5ae5fdf2fc482_megogo/vod/fs/o/40500701/u_sid/0/u_uid/0/u_vod/0/u_device/cms_html5/u_srvc/28561/type.live/playlist.m3u8 |
|
Отправлено: 09:17, 16-08-2020 | #44 |
Старожил Сообщения: 193
|
Профиль | Отправить PM | Цитировать |
Отправлено: 11:32, 16-08-2020 | #45 |
Ветеран Сообщения: 1754
|
|
Отправлено: 11:43, 16-08-2020 | #46 |
Старожил Сообщения: 216
|
Профиль | Отправить PM | Цитировать Fors1k, к сожалению, Ваш код не подходит для плейлистов, где в обязательном порядке должны считываться по две строки (строка с именем канала и ссылка). Код, предложенный Вами, их перекручивает.
Foreigner, Ваш код строки не перекручивает, но и алфавитной сортировки, именно по имени канала, не возвращает. |
Отправлено: 14:16, 16-08-2020 | #47 |
Старожил Сообщения: 193
|
Профиль | Отправить PM | Цитировать Только что запустил код. И мой, и от Foreigner выдает результат, который вы предоставили, как ожидаемый.
|
Отправлено: 14:26, 16-08-2020 | #48 |
Старожил Сообщения: 216
|
Профиль | Отправить PM | Цитировать Fors1k, да, действительно... мои извинения. Пример просто немного неудачный представил.
Но и первый и второй код будет работать только с "чистыми" строками. Если будет, к примеру, директива объявления плейлиста #EXTM3U (самой первой строкой), то скрипты сработают как я выше написал. Попробую после удаления дубликатов запустить. Спасибо! |
Отправлено: 14:39, 16-08-2020 | #49 |
Старожил Сообщения: 193
|
Профиль | Отправить PM | Цитировать Цитата Uragan66:
param( $pathIN = "C:\files\list.txt", $pathOUT = "C:\files\list_new.txt" )cls $List=((Get-Content $pathIN -Raw) -replace "#EXT[^I].+?`r`n",''| sls "#E[^#]+?(\.m3u.?|:\d{4})(?=`r|$)"-All).Matches.Value| sort{($_-split"`r`n")[1]} -u|sort{($_-split"`r`n")[0]} -u| sort{($_-split"`r`n").split(',')[1]} $List|out-file $pathOUT |
|
Отправлено: 14:53, 16-08-2020 | #50 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Любой язык - Удаление из txt файлов не нужных строк и дубликатов строк. | voler | Скриптовые языки администрирования Windows | 1 | 26-02-2018 14:10 | |
Delphi - Обработчик строк из текстового файла | pageYK@fb | Программирование и базы данных | 18 | 11-08-2016 13:40 | |
CMD/BAT - [решено] Удаление строки из текстового файла | Elven | Скриптовые языки администрирования Windows | 2 | 29-11-2013 17:44 | |
CMD/BAT - Поиск и копирование нескольких строк из текстового файла. | valen | Скриптовые языки администрирования Windows | 0 | 07-11-2011 17:27 | |
CMD/BAT - [решено] Перенос и удаление строк из текстового файла | sk8ter | Скриптовые языки администрирования Windows | 15 | 03-10-2010 19:35 |
|