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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Remover, substituir e inserir chars em um arquivo.


From: Alysson Gonçalves de Azevedo
Subject: Re: [shell-script] Remover, substituir e inserir chars em um arquivo.
Date: Sun, 22 Jan 2012 12:29:29 -0200

entendi, muito obrigado..

depois eu compartilho o script que estou bolando aqui, falta algumas coisas
ainda.


Alysson Gonçalves de Azevedo
(11) 8491-7730



Em 22 de janeiro de 2012 12:04, jimmy <address@hidden> escreveu:

> **
>
>
> On Sat, Jan 21, 2012 at 01:25:19PM -0200, Alysson Gonçalves de Azevedo
> wrote:
> > Olá, jimmy, muito obrigado pela colaboração.
> >
> > Todas os 3 exemplos seus funcionaram ok, porém o segundo eu não não achei
> > referências sobre ela, então não sei se entendi corretamente.
> > {s=(s)?s","$NF:$NF}
> >
> > Como eu não achei nenhuma referencia sobre o comando, eu suponho que
> > signifique o seguinte,
> > se s=(s) então s","$NF senão $NF.
> >
> > É isso mesmo?
> Sim, é isso mesmo. "pattern ? pattern : pattern" é o operador ternário e
> funciona de forma igual a da linguagem C. Há menções sobre ele tando no
> man quanto no info do gawk, sendo que no info, há uma explicação mais
> detalhada e com mais exemplos do que o man:
>
> $ info gawk 'Conditional Exp'
>
>
> > Outra coisa, o que exatamente é "s=(s)"?
> É a primeira parte do expressão ternária. Ela testa se a variável
> escalar "s" é válida, neste caso, ser válida significa que já foi
> atribuído algo a ela.
>
>
> > Eu também experimentei trocar o "s" por outra letra, mas não
> > funcionou, então, esse "s" é de String, ao invés de uma variável?
> Não, é exatamente a variável "s" usada para concatenar o último campo de
> cada linha não comentada do arquivo.
>
> Podemos trocar essa condição ternária por:
>
> if ( length(s) != 0 ) {
> s = s "," $NF
> }
> else {
> s = $NF
>
> }
>
> > Mais uma vez, agradeço a todos pela ajuda.
> >
> > Alysson Gonçalves de Azevedo
> > (11) 8491-7730
> >
> >
> >
> > Em 20 de janeiro de 2012 22:19, jimmy <address@hidden> escreveu:
> >
> > > **
>
> > >
> > >
> > > Saudações Alysson,
> > >
> > >
> > > On Fri, Jan 20, 2012 at 06:16:07PM -0200, Alysson Gonçalves de Azevedo
> > > wrote:
> > > > Pessoal, boa tarde.
> > > > Estava estudando aqui um pouquinho sobre awk, e cheguei no seguinte
> > > > problema:
> > > >
> > > > $ cat -E tmp/arquivos.txt
> > > > #/home/odin/shell/tmp/arquivo1.txt$
> > > > #/home/odin/shell/tmp/arquivo2.txt$
> > > > /home/odin/shell/tmp/arquivo3.txt$
> > > > #/home/odin/shell/tmp/arquivo4.txt$
> > > > /home/odin/shell/tmp/arquivo5.txt$
> > > >
> > > > o que eu quero é exibir isso tudo em 1 linha apenas, ignorando as
> linhas
> > > > que começam com #, exibindo apenas o nome do arquivo e seperando-os
> por ;
> > > > (obs, não é para ter ; no final do texto, apenas entre os nomes).
> > > >
> > > > eu consigo isso assim:
> > > > $ awk -F'/' '! /#/ { print $NF }' tmp/arquivos.txt | awk '{if
> > > > (NR==1){printf "%s",$0;}else{printf ";%s", $0;}}'
> > > > arquivo3.txt;arquivo5.txt
> > > >
> > > > eu tentei fazer isso assim:
> > > > $ awk -F'/' '! /#/ {if (NR==1){printf "%s",$NF;}else{printf ",%s",
> > > $NF;}}'
> > > > tmp/arquivos.txt
> > > > ,arquivo3.txt,arquivo5.txt
> > > >
> > > > mas não funciona, pq pra ele, o NR==1 é a primeira linha,
> arquivo1.txt,
> > > que
> > > > está comentada.
> > > >
> > > > Alguém sabe me dar uma luz de como fazer a mesma coisa com apenas 1
> > > > awk ?
> > > Para não mudar muito seu código, você poderia apenas usar uma variável
> > > auxiliar ao invés de NR:
> > >
> > > $ awk -F'/' '! /#/ {i++;if (i==1){printf "%s",$NF;}else{printf ",%s",
> > > $NF;}}' arquivo.txt
> > >
> > > usei "i" como variável.
> > >
> > > Pode-se também concaternar tudo numa variável escalar e só imprimir ao
> > > final ou mesmo armazenar num array para posterior manipulação.
> Exemplos:
> > >
> > > $ awk -F'/' '!/#/{s=(s)?s","$NF:$NF}END{print s}' arquivo.txt
> > >
> > > e
> > >
> > > $ awk -F'/' '!/#/{a[++i]=$NF}END{for(i in a){s=(i!=1)?",":"";printf
> > > s""a[i]}}' arquivo.txt
> > >
> > >
> > > > Desde já agradeço!!
> > > >
> > > > Alysson Gonçalves de Azevedo
> > > > (11) 8491-7730
> > >
> > > []'s.
> > > --
> > > "Não manejo bem as palavras
> > > Mas manipulo bem as strings."
> > > ------------------------------
> > > http://tecnoveneno.blogspot.com
>
>  
>


[As partes desta mensagem que não continham texto foram removidas]



reply via email to

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