我想使用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/

    10-11 16:40