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
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?
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.
com awk
:
awk '{l=$0;getline;print;getline;print $0"\n"l;}' < file_in > file_out
Explicação:
Salvar o registro atual na variável l
Obtenha o próximo registro usando getline
Imprimir esse registro ( print
, invocado sem argumentos será sempre
imprima o registro atual)
Obtenha o próximo registro novamente usando getline
Imprima esse registro, uma nova linha e o primeiro registro armazenado em l
Para o (s) próximo (s) registro (s) começar em 1.
Referências