[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [shell-script] Trocando a linha de cima pelas de baixo - compartilha
From: |
Eduardo Jaime Quiros Batres |
Subject: |
Re: [shell-script] Trocando a linha de cima pelas de baixo - compartilhando solucao |
Date: |
Thu, 11 Oct 2007 08:56:04 -0300 |
User-agent: |
KMail/1.9.6 |
usa o tac (inverso do cat)
Em Qui 11 Out 2007, Ivan lopes escreveu:
> problema:
>
> entrada:
> A
> B
> A
> B
> A
> B
>
> saida desejada:
> B
> A
> B
> A
> B
> A
>
> eu tive o problema a cima ... e a solucao foi usar o sed ...
>
> $ echo -e "A\nB\nA\nB\nA\nB"| sed -n 'h;n;G;p'
>
> todavia, as opcoes do sed me pareceram muito obscuras
> pois eu nao entendia esse tal de `n` hide e `n` next.
>
> ai eu resolvi dar uma lida, por ai e agora vejo que o sed eh
> um cara muito simples ...
>
> E VOU COMPARTILHAR COM VCS ESSAS OBSERVACOES
>
> vejamos:
> substituindo as opcoes de linha por um arquivo com as mesmas
>
> 'h;n;G;p' virou troca.sed
>
> $ cat troca.sed
>
> h
> # esconde a linha no buffer
> # buffer <= linha(atual)
>
> n
> # proxima linha
> # atual++
>
> G
> # saida = saida + buffer + linha(atual)
>
> p
> # imprima a saida.
>
> Tah sei que parece loucura ...
> mas veja dessa forma:
>
> em uma pseudo linguagem ... teriamos
>
> saida = empty
> buffer = empty
>
> atual = 1;
> while (atual <= NumeroDeLinhasDoPipe) {
> buffer = linha(atual)
> atual ++
> saida = saida + buffer + linha(atual)
> atual ++
> }
> imprima saida
>
> FIM ...
>
> CLARO QUE DA FORMA ABAIXO EH MELHOR .... E CORRETA!!!
>
> while (atual <= NumeroDeLinhasDoPipe) {
> buffer = linha(atual)
> saida = saida + buffer + linha(atual)
> atual +=2
> }
>
> vlw
--
Eduardo Jaime Quiros Batres (address@hidden)
--
"Parte da ausĂȘncia de humanidade do computador deve-se a que,
competentemente programado e trabalhado bem, Ă© completamente
honesto."
Isaac Asimov (1920-1992)