Subir determinadas linhas em um arquivo [RESOLVIDO]

1. Subir determinadas linhas em um arquivo [RESOLVIDO]

Mashn
Mashn

(usa Outra)

Enviado em 26/06/2018 - 01:58h

Boa noite, estou criando um script e gostaria de saber se tem como eu trocar determinadas linhas de lugar, mais especificamente subir elas uma linha.

Tenho o seguinte arquivo de texto:
Imagine Dragons - Evolve
374
114.9 MB
Drake - Gods Plan
307
8.0 MB
VA-Nrj Hit Music Only
234
415.4 MB
Music for Your Car
219
763.0 MB
Helium Music Manager
211
15.5 MB


O modo como quero deixar é assim:
Imagine Dragons - Evolve
114.9 MB
374
Drake - Gods Plan
8.0 MB
307
VA-Nrj Hit Music Only
415.4 MB
234
Music for Your Car
763.0 MB
219
Helium Music Manager
15.5 MB
211

Quero passar essas linhas que contém o tamanho em MB/GB para a segunda linha. Já tentei de várias maneiras com o sed mas sem sucesso.


  


2. MELHOR RESPOSTA

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 26/06/2018 - 14:48h

Mashn escreveu:

Boa noite, estou criando um script e gostaria de saber se tem como eu trocar determinadas linhas de lugar, mais especificamente subir elas uma linha.

Tenho o seguinte arquivo de texto:
Imagine Dragons - Evolve
374
114.9 MB
Drake - Gods Plan
307
8.0 MB
VA-Nrj Hit Music Only
234
415.4 MB
Music for Your Car
219
763.0 MB
Helium Music Manager
211
15.5 MB


O modo como quero deixar é assim:
Imagine Dragons - Evolve
114.9 MB
374
Drake - Gods Plan
8.0 MB
307
VA-Nrj Hit Music Only
415.4 MB
234
Music for Your Car
763.0 MB
219
Helium Music Manager
15.5 MB
211

Quero passar essas linhas que contém o tamanho em MB/GB para a segunda linha. Já tentei de várias maneiras com o sed mas sem sucesso.


Boa tarde,
Segue sugestão:
sed -r 's/[MG]B$/&\n/' texto|awk 'BEGIN{FS="\n";RS="\n\n";} {OFS="\n";print $1,$3,$2}'
Imagine Dragons - Evolve
114.9 MB
374
Drake - Gods Plan
8.0 MB
307
VA-Nrj Hit Music Only
415.4 MB
234
Music for Your Car
763.0 MB
219
Helium Music Manager
15.5 MBMB
211


O comando:
sed -r 's/[MG]B$/&\n/' texto
Coloca uma linha "vazia" abaixo da linha com MB ou GB,
O awk inverte a ordem dos campos....

marcelo oliver

3. Re: Subir determinadas linhas em um arquivo [RESOLVIDO]

Diego Mendes Rodrigues
diegomrodrigues

(usa Ubuntu)

Enviado em 26/06/2018 - 08:16h

Poste seu script para podermos te ajudar.
Abraço,
Diego M. Rodrigues


4. Re: Subir determinadas linhas em um arquivo [RESOLVIDO]

Ryuk Shinigami
Ryuk

(usa Nenhuma)

Enviado em 26/06/2018 - 10:24h

Testaí:
for nl in `awk '/MB/{print NR - 1}' arquivo.txt`; do sed -i -n "$nl{h;n;G};p" arquivo.txt; done 



5. Re: Subir determinadas linhas em um arquivo

Sandro Marcell
SMarcell

(usa Slackware)

Enviado em 26/06/2018 - 10:49h

Teste com esse "pequeno monstrinho" em sed... :P

sed -n '/[^a-zA-Z]/{		
p
n
/[^0-9]/{
h
:a
n
p
x
bb
}
x
s/\([^\n]*\)\n\([^\n]*\)$/\2\n\1/
ba
}
:b
p' arquivo



6. Re: Subir determinadas linhas em um arquivo [RESOLVIDO]

Mashn
Mashn

(usa Outra)

Enviado em 26/06/2018 - 12:01h

SMarcell escreveu:

Teste com esse "pequeno monstrinho" em sed... :P

sed -n '/[^a-zA-Z]/{		
p
n
/[^0-9]/{
h
:a
n
p
x
bb
}
x
s/\([^\n]*\)\n\([^\n]*\)$/\2\n\1/
ba
}
:b
p' arquivo


Funcionou, muito obrigado.







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts