我想使用bash在enigma2 dreambox中对 channel 列表进行排序。该文件如下所示:
#SERVICE 4097:0:1:0:0:0:0:0:0:0:http%3A//server.com/movie/1/new.aviM
#DESCRIPTION new 5[EN]
#SERVICE 4097:0:1:0:0:0:0:0:0:0:http%3A//server.com/movie/11/all2.mkvM
#DESCRIPTION all 2 [EN]
#SERVICE 4097:0:1:0:0:0:0:0:0:0:http%3A//server.com/movie/movie3.mp4M
#DESCRIPTION movie 3 [EN]
如您在文件中看到的,每个通道由两行组成。我想每次以bash排序两行。
结果应如下所示:
#SERVICE 4097:0:1:0:0:0:0:0:0:0:http%3A//server.com/movie/11/all2.mkvM
#DESCRIPTION all 2 [EN]
#SERVICE 4097:0:1:0:0:0:0:0:0:0:http%3A//server.com/movie/movie3.mp4M
#DESCRIPTION movie 3 [EN]
#SERVICE 4097:0:1:0:0:0:0:0:0:0:http%3A//server.com/movie/1/new.aviM
#DESCRIPTION new 5[EN]
第一个是
all 2 [EN]
,其上方是SERVICE
。其次是电影
movie 3 [EN]
,其上方是SERVICE
。第三是电影
new 5[EN]
,上方是SERVICE
。我现在正在使用循环,这非常慢。我认为使用bash可以更快地完成此操作
可能的解决方案可能是,例如:
#DESCRIPTION new 5[EN]#SERVICE 4097:0:1:0:0:0:0:0:0:0:http%3A//server.com/movie/1/new.aviM
#DESCRIPTION all 2 [EN]#SERVICE 4097:0:1:0:0:0:0:0:0:0:http%3A//server.com/movie/11/all2.mkvM
#DESCRIPTION movie 3 [EN]#SERVICE 4097:0:1:0:0:0:0:0:0:0:http%3A//server.com/movie/movie3.mp4M
最佳答案
awk
和 sed
:
#!/usr/bin/env bash
awk '/^#SERV/ {s=$0} /^#DESC/ {print s "\t" $0}' |
sort -t $'\t' -k 2,2 |
sed 's/\t/\n/'
关于linux - 如何在bash中一次将两行排序,使用第二行作为索引?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45825880/