此脚本将匹配的“组”体育从我的文件中提取到输出 emby_sports.m3u。我有所有常见的组,例如“新闻”、“常规流”、“电影”。
是否可以调整此脚本以在一次运行中“拉取所有组”并将它们分成多个文件,还是我需要为每个需要拉取的组编写一个单独的脚本?
这仅拉动“体育”组......
#!/bin/sh
while read -r LINE || [ -n "$LINE" ]; do
awk '/group-title="Sports"/{nr[NR]; nr[NR+1]}; NR in nr'
sed -i '1i #EXTM3U' emby_iptv_tmp.m3u
done < iptv_download.m3u
mv emby_iptv_tmp.m3u emby_sports.m3u
rm iptv_download.m3u
以下是包含“Sports”的所有行所需的输出示例。我希望一次性输出所有组“General Streams”、“Kids”、“News”。
我是否只是awk
像对多个脚本一样一遍又一遍地重复语句和输出,或者是否有一些 awk 格式可以在一行上完成此操作?
#EXTM3U
#EXTINF:-1 tvg-ID="" tvg-name="AU: Fox NRL League HD" tvg-logo="" group-title="Sports",AU: Fox NRL League HD
http://**************@gmail.com/**************/53441.m3u8
#EXTINF:-1 tvg-ID="Golf Channel CA" tvg-name="CA: Golf Channel UHD" tvg-logo="" group-title="Sports",CA: Golf Channel UHD
http://**************@gmail.com/**************/45062.m3u8
#EXTINF:-1 tvg-ID="Golf Channel CA" tvg-name="CA: Golf Channel" tvg-logo="" group-title="Sports",CA: Golf Channel
http://**************@gmail.com/**************/45369.m3u8
#EXTINF:-1 tvg-ID="HPItv" tvg-name="CA: HPItv (HORSE RACING)" tvg-logo="" group-title="Sports",CA: HPItv (HORSE RACING)
http://**************@gmail.com/**************/55732.m3u8
答案1
我不太了解awk
,我只会使用grep
并循环遍历组名,如下所示:
for i in Sports News" Movies "General Streams"
do
<input.m3u grep --no-group-separator -A1 'group-title="'"$i"\" >"$i.m3u"
sed -i '1i #EXTM3U' "$i.m3u"
done
这会将输出保存在仅通过组名调用的文件中,例如Sports.m3u
和General Streams.m3u
。
这GNUparallel
与此循环等效的是:
parallel '<input.m3u grep -A1 group-title=\"{}\" >{}.m3u;sed -i "1i #EXTM3U" {}.m3u' ::: Sports News Movies "General Streams"