Inverte a ordem dos pares de linhas de um arquivo de texto

1

Eu gostaria de reverter a ordem dos pares de linhas de um arquivo de texto (playlist m3u).

Este é o conteúdo original do arquivo m3u:

#EXTM3U
#EXTINF:-1,AL: Klan HD (AL)
http://mydomain.org:8000/live/username/mypass/1.ts
#EXTINF:-1,AL: Klan HD Beckup
http://mydomain.org:8000/live/username/mypass/2.ts
#EXTINF:-1,AL: Klan Kosova
http://mydomain.org:8000/live/username/mypass/3.ts
#EXTINF:-1,AL: Klan Kosova (B)
http://mydomain.org:8000/live/username/mypass/4.ts
#EXTINF:-1,AL: Top Channel SD
http://mydomain.org:8000/live/username/mypass/5.ts
#EXTINF:-1,AL: Top Channel HD
http://mydomain.org:8000/live/username/mypass/6.ts
#EXTINF:-1,AL: Top Channel Beckup
http://mydomain.org:8000/live/username/mypass/7.ts
#EXTINF:-1,AL: TV Uskana
http://mydomain.org:8000/live/username/mypass/8.ts

Eu preciso reverter assim:

#EXTM3U
#EXTINF:-1,AL: TV Uskana
http://mydomain.org:8000/live/username/mypass/8.ts
#EXTINF:-1,AL: Top Channel Beckup
http://mydomain.org:8000/live/username/mypass/7.ts
#EXTINF:-1,AL: Top Channel HD
http://mydomain.org:8000/live/username/mypass/6.ts
#EXTINF:-1,AL: Top Channel SD
http://mydomain.org:8000/live/username/mypass/5.ts
#EXTINF:-1,AL: Klan Kosova (B)
http://mydomain.org:8000/live/username/mypass/4.ts
#EXTINF:-1,AL: Klan Kosova
http://mydomain.org:8000/live/username/mypass/3.ts
#EXTINF:-1,AL: Klan HD Beckup
http://mydomain.org:8000/live/username/mypass/2.ts
#EXTINF:-1,AL: Klan HD (AL)
http://mydomain.org:8000/live/username/mypass/1.ts

Eu já entendi assim:

http://mydomain.org:8000/live/username/mypass/8.ts
#EXTINF:-1,AL: TV Uskana
http://mydomain.org:8000/live/username/mypass/7.ts
#EXTINF:-1,AL: Top Channel Beckup
http://mydomain.org:8000/live/username/mypass/6.ts
#EXTINF:-1,AL: Top Channel HD
http://mydomain.org:8000/live/username/mypass/5.ts
#EXTINF:-1,AL: Top Channel SD
http://mydomain.org:8000/live/username/mypass/4.ts
#EXTINF:-1,AL: Klan Kosova (B)
http://mydomain.org:8000/live/username/mypass/3.ts
#EXTINF:-1,AL: Klan Kosova
http://mydomain.org:8000/live/username/mypass/2.ts
#EXTINF:-1,AL: Klan HD Beckup
http://mydomain.org:8000/live/username/mypass/1.ts
#EXTINF:-1,AL: Klan HD (AL)
#EXTM3U

Mas não é o que eu preciso.

    
por Adem Aga 11.01.2017 / 02:14

2 respostas

2

Eu imprimo o cabeçalho, troco as linhas em cada par, depois inverto tudo:

{ head -n 1; { sed -n 'h;n;G;p' | tac; } ; } < infile

Experimente tail -r se tac não estiver disponível no seu sistema. Além disso, em algumas configurações, isso não funcionará porque o head é estúpido e o não está em conformidade com o padrões - a outra maneira rápida de fazer isso é via sed q :

{ sed q; { sed -n 'h;n;G;p' | tail -r; } ; } < infile
    
por 11.01.2017 / 14:25
0
echo '#EXTM3U';grep -v ^#EXTM3U m3u |sed 'N;s/\n/ /'|sed -e 's/\(.*\)\(http.*\)$/\n/'|tac 
    
por 11.01.2017 / 03:45