Reordenar linhas em cada registro de 3 linhas

0

Eu tenho um arquivo que contém muitos registros da seguinte maneira.

Name
Address
Phone

Esta é a sequência de cada registro nesse arquivo. Agora, quero copiar esse arquivo para outro arquivo com a ordem alterada, conforme abaixo.

Address
Phone
Name

Como escrever o shell script para fazer isso?

    
por shinek 09.05.2015 / 16:08

3 respostas

4

Tente:

sed -n 'h;n;p;n;G;p' < file.in > file.out

Por exemplo:

$ seq 9 | sed -n 'h;n;p;n;G;p'
2
3
1
5
6
4
8
9
7
    
por 09.05.2015 / 16:18
2

Se eu estou lendo sua pergunta corretamente, você quer tirar seqüências de 3 linhas do arquivo e trocar a ordem do primeiro e do último em cada uma delas? Com o GNU sed, você poderia fazer algo assim:

sed -e :a -e '$!N' -e 's/\(.*\)\n\(.*\)\n\(.*\)$/\n\n/;Ta' file

que continuamente absorve as linhas até que seja capaz de fazer a troca e, em seguida, reinicia.

    
por 09.05.2015 / 16:30
1

com awk :

awk '{l=$0;getline;print;getline;print $0"\n"l;}' < file_in > file_out

Explicação:

  1. Salvar o registro atual na variável l

  2. Obtenha o próximo registro usando getline

  3. Imprimir esse registro ( print , invocado sem argumentos será sempre imprima o registro atual)

  4. Obtenha o próximo registro novamente usando getline

  5. Imprima esse registro, uma nova linha e o primeiro registro armazenado em l

  6. Para o (s) próximo (s) registro (s) começar em 1.

Referências

por 09.05.2015 / 18:51