我正在尝试将流转换为:
#EXTINF:-1 group-title="SERVER 1-Tv" tvg-logo="http://anotherRandomUrl.com/icon.png",NBC
http://AnotherStreamUrl.m3u8
#EXTINF:-1 tvg-logo="http://randomUrl.com/icon.png",ABC HD
http://StreamUrl.m3u8
#EXTINF:-1 tvg-logo="http://YetAnotherRandomUrl.com/icon.png",Discovery
http://DisStreamUrl.m3u8
进入:
#EXTINF:-1 tvg-logo="http://randomUrl.com/icon.png",ABC HD
http://StreamUrl.m3u8
#EXTINF:-1 tvg-logo="http://YetAnotherRandomUrl.com/icon.png",Discovery
http://DisStreamUrl.m3u8
#EXTINF:-1 group-title="SERVER 1-Tv" tvg-logo="http://anotherRandomUrl.com/icon.png",NBC
http://AnotherStreamUrl.m3u8
...通过对以 #
开头的行的第二个逗号分隔字段进行排序,同时将其他行与带有排序键的行一起重新排序。
所以我只会对包含“#EXTINF”的行执行排序,并从“,”之后进行排序。它还应该保留排序行下方的行(URL 行)。
最佳答案
将数据转换为易于排序的格式,然后重新排序。所以:
to_one_line_per_record() {
local inf_line= line=
while read -r line; do
if [[ $line = "#"* ]]; then
inf_line=$line
else
printf '%s\n' "${inf_line},$line"
fi
done
}
from_one_line_per_record() {
local inf_f1 inf_f2 url
while IFS=, read -r inf_f1 inf_f2 url; do
printf '%s,%s\n%s\n' "$inf_f1" "$inf_f2" "$url"
done
}
to_one_line_from_record | sort -t, -k2,2 | from_one_line_per_record
根据给定的输入,to_one_line_per_record
的输出为:
#EXTINF:-1 group-title="SERVER 1-Tv" tvg-logo="http://anotherRandomUrl.com/icon.png",NBC,http://AnotherStreamUrl.m3u8
#EXTINF:-1 tvg-logo="http://randomUrl.com/icon.png",ABC HD,http://StreamUrl.m3u8
#EXTINF:-1 tvg-logo="http://YetAnotherRandomUrl.com/icon.png",Discovery,http://DisStreamUrl.m3u8
通过 sort -t, -k2,2
传递该结果,输出变为:
#EXTINF:-1 tvg-logo="http://randomUrl.com/icon.png",ABC HD,http://StreamUrl.m3u8
#EXTINF:-1 tvg-logo="http://YetAnotherRandomUrl.com/icon.png",Discovery,http://DisStreamUrl.m3u8
#EXTINF:-1 group-title="SERVER 1-Tv" tvg-logo="http://anotherRandomUrl.com/icon.png",NBC,http://AnotherStreamUrl.m3u8
并将该传递给from_one_line_per_record
,它会转换为:
#EXTINF:-1 tvg-logo="http://randomUrl.com/icon.png",ABC HD
http://StreamUrl.m3u8
#EXTINF:-1 tvg-logo="http://YetAnotherRandomUrl.com/icon.png",Discovery
http://DisStreamUrl.m3u8
#EXTINF:-1 group-title="SERVER 1-Tv" tvg-logo="http://anotherRandomUrl.com/icon.png",NBC
http://AnotherStreamUrl.m3u8
关于bash - 根据其中一行中的单个字段对行对进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45844859/