shell-script-pt
[Top][All Lists]
Advanced

[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: Edjunior Machado
Subject: Re: [shell-script] Trocando a linha de cima pelas de baixo - compartilhando solucao
Date: Thu, 11 Oct 2007 08:14:32 -0300

Hey Ivan,

Bem legal as soluções usando sed e uma estrutura em shell puro.

Obviamente sem nenhuma intenção de menosprezar a informação, mas se o
problema em questão é imprimir um determinado arquivo na ordem
inversa, dentre as ferramentas do GNU Coreutils temos o 'tac'
(conforme já citado aqui mesmo na lista em outra oportunidade):

$ cat entrada
A
B
A
B
A
B

 $ tac entrada
B
A
B
A
B
A

hasta!

jr.

On 10/11/07, Ivan lopes <address@hidden> wrote:
> 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
>
> --
> [ ]'s
> Ivan Carlos Da Silva Lopes
>
> Engenheiro Eletronico e Computacao
> UFRJ
>
>
> ---------------------------------------------------------------------
> Esta lista não admite a abordagem de outras liguagens de programação, como 
> perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio 
> aviso.
> ---------------------------------------------------------------------
> Sair da lista: address@hidden
> ---------------------------------------------------------------------
> Esta lista é moderada de acordo com o previsto em 
> http://www.listas-discussao.cjb.net
> ---------------------------------------------------------------------
> Servidor Newsgroup da lista: news.gmane.org
> Grupo: gmane.org.user-groups.programming.shell.brazil
>
>
> Links do Yahoo! Grupos
>
>
>


reply via email to

[Prev in Thread] Current Thread [Next in Thread]