[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [shell-script] Duvida
From: |
SleepWalker |
Subject: |
Re: [shell-script] Duvida |
Date: |
Fri, 26 Nov 2004 09:11:12 -0200 |
Bom... mais uma vez obrigado pela ajuda!!
Acho melhor eu comecar arranjar algumas desculpas entao para explicar para
minha futura esposa pq estou no computador as 23:40 e noa na cama hehehehheheeh
Falow
[]´s
MrBiTs wrote:
> > Alguem ai me diz o significado desses comando:
> > "diff -y"
> > "--suppress-common-lines"
> > " tr -d '\011' tr -d ' ' "
> > Eu perguntei pra pessoa que me ajudou nesse script mas acho q ela
> > noa ta online no momento... se alguem ai on line puder me dizer...
> > agradeço
>
> Pois é... depois que vc casa, fica meio complicado explicar para a esposa por
> que voce esta no computador e nao na cama às 23:48. É o preço que se paga por
> nao ser onipresente nem ter um motor de dobra para andar em Warp 10.
>
> Vamos la: extraidos da fonte:
>
> man diff nos diz que:
>
> diff - compara arquivos linha a linha
>
> -y --side-by-side
> Saida em duas colunas
>
> --suppress-common-lines
> Nao mostra linhas em comum
>
> Para uma melhor compreensao, desmembramos o comando: Entao, la naquele seu
> problema original, temos:
>
> $ diff -y --suppress-common-lines frutas1.txt frutas2.txt
> carambola | cagambola
> cupuacu | cupuassu
> manga | mango
>
> O diff comparou os dois arquivos, o -y formatou a saida em duas colunas e o
> --suppress-common-lines mostrou somente onde os arquivos estao diferentes. O
> problema dessa saida é que ela esta formatada com tabs e espacos.
>
> Entao vem a segunda parte do comando
>
> tr -d '\011' | tr -d ' '
>
> De novo, direto da fonte: man tr nos diz que:
>
> tr - traduz ou apaga caracteres
>
> -d, --delete
> apaga caracteres, sem traduzi-los
>
> entao, tr -d '\011' apaga o caracter octal TAB, que é o caracter gerado pelo
> pressionamento da tecla TAB e tr -d ' ' apaga os espacos.
>
> Voce sabe que o | (pipe) "canaliza" a saida de um comando para o outro, certo
> ?
> Entao, se eu faco
>
> diff -y --suppress-common-lines frutas1.txt frutas2.txt | tr -d '\011' | tr
> -d ' '
>
> estou dizendo ao sistema para comparar frutas1 e frutas2, mostrando somente
> os "registros dissonantes" ( Minority Report, alguem viu ??? ) em duas
> colunas. Pegue essa saida e apague dela os TAB (\011) . Pegue essa segunda
> saida e apague dela os espaços. Dai vc tem o resultado:
>
> carambola|cagambola
> cupuacu|cupuassu
> manga|mango
>
> Temos entao um caso tipico de registros delimitados. O nosso delimitador ai,
> chamado em alguns lugares de FS ( Field Separator ), é o |.
>
> Como tenho 3 registros, esta ótimo para gerar um laco rapido, ler registro a
> registro e formatar essa saida do jeito que eu quero. Entao vem o laco for do
> script, atribuindo a uma variavel a linha carambola|cagambola. Vamos chama-la
> de $linha
>
> echo $linha vai me mostrar exatamente o carambola|cagambola. Sabendo que o |
> ( comando de shell; nao confunda com o seu FS ) canaliza os resultados de um
> comando para outro, temos:
>
> echo $linha | cut -d "|" -f 1
>
> Estamos dizendo: ecoe, imprima o conteudo da variavel linha
> (carambola|cagambola) e corte-o pelo |, mostrando somente o campo 1, que me
> da carambola. Similarmente,
>
> echo $linha | cut -d "|" -f 2 me devolve a palavra cagambola.
>
> Acho que deu uma luz, nao foi ?
>
> Dica de sucesso: sabendo agora que o | canaliza resultados, repita os
> comandos do script EM SEPARADO, para voce visualizar a saida e o que esta
> acontecendo durante o processamento. Repita isso à exaustao, mas nao deixe
> de entender. E aproveite para ler as man pages do diff, do tr e de todos os
> comandos existentes em /bin, /sbin, /usr/bin e /usr/sbin e, eventualmente, os
> existentes em /usr/local/bin e /usr/local/sbin ( se existirem ). Man pages
> podem vir a ser suas melhores amigas.
>
> Depois de compreendida essa estrutura mais simplista, de comandos em
> separado, voce pode passar para o Lado Negro da Força, e fazer as magias
> negras que bruxos como o Julio e o Aurélio fazem.
>
> Um abraço
>
> [As partes desta mensagem que não continham texto foram removidas]
>
> ---------------------------------------------------------------------
> 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
> ---------------------------------------------------------------------
>
> Links do Yahoo! Grupos
>
>
>
>
>