LINUX.ORG.RU

Сортировка плейлиста m3u

 ,


0

1

Как отсортировать по названию каналов из скрипта?

#EXTINF:-1 catchup group-title="Познавательные" tvg-id="738589577doktor",Доктор
http://192.168.1.166:9090/InternationalID=1686
#EXTINF:-1 catchup group-title="Познавательные" tvg-id="738589577texno24",Техно 24
http://192.168.1.166:9090/InternationalID=1687
#EXTINF:-1 catchup group-title="Развлекательные" tvg-id="738589577360news",360°
http://192.168.1.166:9090/InternationalID=1688
#EXTINF:-1 catchup group-title="HD каналы" tvg-id="738589577360news",360° HD
http://192.168.1.166:9090/InternationalID=1689
#EXTINF:-1 catchup group-title="Общественные" tvg-id="7385895778kanalru",8 канал (Россия)
http://192.168.1.166:9090/InternationalID=1690
#EXTINF:-1 catchup group-title="Музыка" tvg-id="738589577tntmusic",ТНТ MUSIC
http://192.168.1.166:9090/InternationalID=1691
#EXTINF:-1 catchup group-title="Фильмы" tvg-id="738589577amedia1",A1

Что-то ничего не гуглится.
Что можно просто открыть в VLC, отсортировать и сохранить знаю)

★★★★★

Как-то так:

$ echo '#EXTINF:-1 catchup group-title="Познавательные" tvg-id="738589577doktor",Доктор
http://192.168.1.166:9090/InternationalID=1686
#EXTINF:-1 catchup group-title="Познавательные" tvg-id="738589577texno24",Техно 24
http://192.168.1.166:9090/InternationalID=1687
#EXTINF:-1 catchup group-title="Развлекательные" tvg-id="738589577360news",360°
http://192.168.1.166:9090/InternationalID=1688
#EXTINF:-1 catchup group-title="HD каналы" tvg-id="738589577360news",360° HD
http://192.168.1.166:9090/InternationalID=1689
#EXTINF:-1 catchup group-title="Общественные" tvg-id="7385895778kanalru",8 канал (Россия)
http://192.168.1.166:9090/InternationalID=1690
#EXTINF:-1 catchup group-title="Музыка" tvg-id="738589577tntmusic",ТНТ MUSIC
http://192.168.1.166:9090/InternationalID=1691
#EXTINF:-1 catchup group-title="Фильмы" tvg-id="738589577amedia1",A1' | sed "N;s/\n/\t/g" | sort | sed "s/\t/\n/g"

#EXTINF:-1 catchup group-title=HD каналы tvg-id=738589577360news,360° HD
http://192.168.1.166:9090/InternationalID=1689
#EXTINF:-1 catchup group-title=Музыка tvg-id=738589577tntmusic,ТНТ MUSIC
http://192.168.1.166:9090/InternationalID=1691
#EXTINF:-1 catchup group-title=Общественные tvg-id=7385895778kanalru,8 канал (Россия)
http://192.168.1.166:9090/InternationalID=1690
#EXTINF:-1 catchup group-title=Познавательные tvg-id=738589577doktor,Доктор
http://192.168.1.166:9090/InternationalID=1686
#EXTINF:-1 catchup group-title=Познавательные tvg-id=738589577texno24,Техно 24
http://192.168.1.166:9090/InternationalID=1687
#EXTINF:-1 catchup group-title=Развлекательные tvg-id=738589577360news,360°
http://192.168.1.166:9090/InternationalID=1688
#EXTINF:-1 catchup group-title=Фильмы tvg-id=738589577amedia1,A1

Kroz ★★★★★
()

Или что такое канал? То, что после запятой?
Тогда так (предполагая что в названии канала запятой быть не может):

$ echo '-----------------'; echo '#EXTINF:-1 catchup group-title="Познавательные" tvg-id="738589577doktor",Доктор
http://192.168.1.166:9090/InternationalID=1686
#EXTINF:-1 catchup group-title="Познавательные" tvg-id="738589577texno24",Техно 24
http://192.168.1.166:9090/InternationalID=1687
#EXTINF:-1 catchup group-title="Развлекательные" tvg-id="738589577360news",360°
http://192.168.1.166:9090/InternationalID=1688
#EXTINF:-1 catchup group-title="HD каналы" tvg-id="738589577360news",360° HD
http://192.168.1.166:9090/InternationalID=1689
#EXTINF:-1 catchup group-title="Общественные" tvg-id="7385895778kanalru",8 канал (Россия)
http://192.168.1.166:9090/InternationalID=1690
#EXTINF:-1 catchup group-title="Музыка" tvg-id="738589577tntmusic",ТНТ MUSIC
http://192.168.1.166:9090/InternationalID=1691' | sed "N;s/\n/,\t/g" | sort -t, -k2 | sed "s/,\t/\n/g"

-----------------
#EXTINF:-1 catchup group-title="HD каналы" tvg-id="738589577360news",360° HD
http://192.168.1.166:9090/InternationalID=1689
#EXTINF:-1 catchup group-title="Развлекательные" tvg-id="738589577360news",360°
http://192.168.1.166:9090/InternationalID=1688
#EXTINF:-1 catchup group-title="Общественные" tvg-id="7385895778kanalru",8 канал (Россия)
http://192.168.1.166:9090/InternationalID=1690
#EXTINF:-1 catchup group-title="Познавательные" tvg-id="738589577doktor",Доктор
http://192.168.1.166:9090/InternationalID=1686
#EXTINF:-1 catchup group-title="Познавательные" tvg-id="738589577texno24",Техно 24
http://192.168.1.166:9090/InternationalID=1687
#EXTINF:-1 catchup group-title="Музыка" tvg-id="738589577tntmusic",ТНТ MUSIC
http://192.168.1.166:9090/InternationalID=1691

Kroz ★★★★★
()
Ответ на: комментарий от Kroz

Да, вот второй вариант отлично отработал.

Большое спасибо, добрый человек)
Ты сэкономил мне кучу времени.

athost ★★★★★
() автор топика
30 декабря 2019 г.
Ответ на: комментарий от Kroz

А если количество строк на одну запись меняется?

В идеале хочется отсортировать по group-title (где есть), а внутри него по имени канала.

#EXTINF:-1,1HD
https://1hdru-hls-otcnet.cdnvideo.ru/onehdmusic/tracks-v1a1/mono.m3u8
#EXTINF:-1,1HD (bonus-tv)
http://cdn-01.bonus-tv.ru:8080/1HDmusic/tracks-v4a1/index.m3u8
#EXTINF:-1 tvg-id="pervy-pl4" group-title="Федеральные",Первый (+4)
#EXTVLCOPT:http-user-agent=DuneHD/1.0.3
http://hls.peers.tv/streaming/1kanal/16/variable.m3u8
#EXTINF:-1 group-title="Федеральные",Первый
#EXTVLCOPT:http-user-agent=smartlabs
http://hls.peers.tv/streaming/1kanal/126/variable.m3u8
#EXTINF:0 group-title="Эфирные HD",Первый канал HD
http://stream-nexttv.comboplayer.ru/hlsl/1/First_HD/04.m3u8
#EXTINF:0 group-title="Эфирные HD",Первый канал HD (Резерв)
http://188.35.9.5:10005/stolen/103r/imposter.rar

Spine
()

Объедини строки sed-ом с «разделителем», отсортируй, разбей строки sed-ом по «разделителю».

anonymous
()
Ответ на: комментарий от anonymous

Спасибо КО, я это из примера от Kroz понял, regexp для переменного количества строк я ещё наверное осилю (не факт), а как сортировать по нескольким полям для меня пока в тумане :(

Spine
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.