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

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

Re: [shell-script] Erro num script pra contar frequência das palavras


From: Julio C. Neves
Subject: Re: [shell-script] Erro num script pra contar frequência das palavras
Date: Mon, 10 May 2010 23:06:44 -0300

Helton,
esse getopts ao qual o Law se referiu, está super explicado
aqui<http://wiki.softwarelivre.org/TWikiBar/TWikiBarPapo010#Comando_getopts>
.
Abraços,
Julio
Cursos de Shell e Zenity em 2 fins de semana?
- Aracaju turma de Shell em 12/05 - address@hidden;
- DF turma de Shell em 12/06 - ligue (61)3223-3000;
- RJ turma de Shell em 14/06 - ligue (21)2210-6061;
- Floripa turma de Shell e Zenity 12/07 – address@hidden;
- Turmas fechadas em outras cidades ligue (21)8112-9988.


Em 10 de maio de 2010 19:17, Lawrence Waclawiak
<address@hidden>escreveu:

> Amigo, com certeza você pode criar uma opção no seu script para
> adicionar as palavras na lista "negra" porém a idéia de adicionar essas
> palavras no próprio script(Carregar em uma variável) não me parece ser
> uma boa idéia pois além de trabalhoso seria perigoso e desnecessário.
> Seria muito mais simples e eficiente vc criar um arquivo adicional para
> cada tipo de lista que deseje criar.
>
> Para fazer o esquema de "--include palavra" pesquise a respeito do
> getopts, com ele vc pode passar vários parametros identificados para o
> teu script e tomar decisões de como proceder dependendo de qual
> parâmetro foi passado.
>
>
> Abraços
> Helton Moraes escreveu:
> > Dando continuidade a algo que poderá crescer, crescer...
> >
> > Julio, então estou pensando em fazer o seguinte (só que obviamente
> preciso
> > de uma luz):
> >
> > 1) incluir a lista de palavras num determinado trecho do próprio arquivo
> do
> > script 'statex';
> > 2) incluir uma opção que edita o próprio arquivo (isso existe?).
> >
> > assim, se eu quisesse incluir a palavra <para> na lista negra, usaria
> algo
> > do tipo
> >
> > statex --include para
> >
> > novamente, pergunto: isso existe? (opção que altera o próprio script)?
> >
> > Obrigado
> >
> > Helton (lembrando sempre que em shell não se pergunta se tem como fazer,
> e
> > sim como é que se faz :oP)
> >
> >
> >
> >
> > Em 10 de maio de 2010 17:24, Julio C. Neves <address@hidden
> >escreveu:
> >
> >
> >> Helton,
> >> eu não limitaria em palavras maiores de 5 caracteres. Eu criaria um
> arquivo
> >> chamado MenosEssas que teria todas as palavras que vc não quer como do,
> da,
> >> que, de, o, a, ..., todas antecedidas por um ^ e sucedidas por um $.
> >>
> >> Cada vez que vc encontrar uma palavra indesejada, basta inclui-la no
> >> arquivo
> >> e reprocessar.
> >>
> >> Nesse caso tire aquele aquele trecho de código que tem o limitador {5} e
> >> insira antes de contar (para não perder tempo contando e classificando
> >> atoa)
> >> o trecho a seguir:
> >>
> >> grep -vf MenosEssas
> >>
> >> Outra coisa que vc não pensou é em palavras com hífen e as mesmas
> palavras
> >> no singular e plural.
> >>
> >> Abraços,
> >> Julio
> >> Cursos de Shell e Zenity em 2 fins de semana?
> >> - Aracaju turma de Shell em 12/05 - address@hidden;
> >> - DF turma de Shell em 12/06 - ligue (61)3223-3000;
> >> - RJ turma de Shell em 14/06 - ligue (21)2210-6061;
> >> - Floripa turma de Shell e Zenity 12/07 – address@hidden;
> >> - Turmas fechadas em outras cidades ligue (21)8112-9988.
> >>
> >>
> >> Em 10 de maio de 2010 16:47, Helton Moraes <address@hidden>
> >> escreveu:
> >>
> >>
> >>> Buenas!
> >>>
> >>> Juntando as dicas que me mandaram, e acrescentando mais algumas opções
> >>> cômodas, o script STATEX (statistics of text ;o) ficou assim (vai que
> >>>
> >> seja
> >>
> >>> útil pra mais alguém...):
> >>>
> >>> tr -s "[:punct:] " "\n" <FlyerVert.txt | tr "[:upper:]" "[:lower:]" |\
> >>>  sort | uniq -c | sort -gr | grep -E '[\ ]+[0-9][0-9]*\ [[:alpha:]]{5}'
> >>>
> >> |\
> >>
> >>>  head -n 20
> >>>
> >>> comentários:
> >>> tr -s > colapsa caracteres consecutivos ([:punct:] pega tudo que é
> >>> pontuação)
> >>> tr "[:upper:]" "[:lower:]" > troca maiúsculas por minúsculas;
> >>> sort -gr > o -g é pra que ele ordene por ordem numérica, e o r para que
> >>> venha a ordem numérica ao contrário (decrescente);
> >>> grep > ali no meio tem um {5}, que foi o valor que escolhi para tamanho
> >>> mínimo de palavra (senão as mais frequentes são sempre e, os, as, de,
> >>>
> >> por,
> >>
> >>> para, etc.). A regex pega algum número seguido de um espaço seguido de
> >>>
> >> uma
> >>
> >>> palavra com 5 caracteres, na ordem que veio do sort
> >>> head > mostra só os resultados mais importantes (os primeiros)
> >>>
> >>> notar que pro tr a sintaxe é [:class:] enquanto pro grep é [[:class:]]
> >>> (haja
> >>> atenção...).
> >>>
> >>> evidentemente a cereja no bolo é trocar o '5' e o '20' por $2 e $3,
> >>> deixando
> >>> o $1 para o nome de arquivo, e salvar como um script que aceite
> >>>
> >> parâmetros.
> >>
> >>> Desculpem se fui muito elementar
> >>>
> >>> Helton
> >>>
> >>>
> >>>
> >>> Em 10 de maio de 2010 14:56, Julio C. Neves <address@hidden
> >>>
> >>>> escreveu:
> >>>>
> >>>> Fala Helton,
> >>>> acho que vc queria fazer:
> >>>> $ echo "$Var"
> >>>> o problema é que o resultado digo o resultado repito o resultado
> >>>>
> >> aparece
> >>
> >>>> assim
> >>>> $ tr ' ' '\n' <<< $Var | sort | uniq -c | sort -r
> >>>>      4 o
> >>>>      3 resultado
> >>>>      1 repito
> >>>>      1 que
> >>>>      1 problema
> >>>>      1 é
> >>>>      1 digo
> >>>>      1 assim
> >>>>      1 aparece
> >>>>
> >>>> Porém existem outras soluções:
> >>>> 1 - Usando Arrays Associativas, a partir do Bash 4.0
> >>>> $ for palavra in $Var; do let palavras[$palavra]++; done
> >>>> $ paste <(echo ${palavras[@]} | xargs -n1) <(echo ${!palavras[@]} |
> >>>>
> >> xargs
> >>
> >>>> -n1)
> >>>> 1    digo
> >>>> 1    que
> >>>> 1    repito
> >>>> 3    resultado
> >>>> 1    assim
> >>>> 1    é
> >>>> 4    o
> >>>> 1    aparece
> >>>> 1    problema
> >>>>
> >>>> 2- Usando awk:
> >>>> awk '{
> >>>>     for (w = 1; w <= NF; w++) conta[$w] ++
> >>>> }
> >>>> END {
> >>>>     for (w in conta) print conta[w], w | "sort -nr"
> >>>> }' /arquivo/que/deseja/contar
> >>>>
> >>>> Abraços,
> >>>> Julio
> >>>> Cursos de Shell e Zenity em 2 fins de semana?
> >>>> - Aracaju turma de Shell em 12/05 - address@hidden;
> >>>> - DF turma de Shell em 12/06 - ligue (61)3223-3000;
> >>>> - RJ turma de Shell em 14/06 - ligue (21)2210-6061;
> >>>> - Floripa turma de Shell e Zenity 12/07 – address@hidden;
> >>>> - Turmas fechadas em outras cidades ligue (21)8112-9988.
> >>>>
> >>>>
> >>>> Em 10 de maio de 2010 14:24, Helton Moraes <address@hidden>
> >>>> escreveu:
> >>>>
> >>>>
> >>>>> Caros colegas
> >>>>>
> >>>>> Primeiramente, caso alguém conheça alguma técnica ou programa ou
> >>>>>
> >> script
> >>
> >>>>> pronto (link) para o que estou tentando fazer, aceito a sugestão!
> >>>>>
> >> Vamos
> >>
> >>>> lá:
> >>>>
> >>>>> Estou encarregado de dar uma melhorada no estilo de um texto
> >>>>>
> >>>> publicitário,
> >>>>
> >>>>> e
> >>>>> como bom nerd pretendo usar o shell para isso, contando as palavras
> >>>>> repetidas de um arquivo de texto. Para isso, tentei usar um oneliner
> >>>>>
> >>> com
> >>>
> >>>> a
> >>>>
> >>>>> seguinte sequência:
> >>>>>
> >>>>> cat (carrega o arquivo)
> >>>>> tr (trocar espaços por novas linhas \n)
> >>>>> uniq -ci (contar as linhas repetidas ignorando maiúscula/minúscula)
> >>>>> sort -r (para que as palavras mais frequentes apareçam na parte baixa
> >>>>>
> >>> do
> >>>
> >>>>> terminal assim que eu der ENTER)
> >>>>>
> >>>>> ficou assim:
> >>>>>
> >>>>> cat /home/helton/Desktop/test.txt | tr " " "\n" | uniq -c | sort -r
> >>>>>
> >>>>> O PROBLEMA é que o resultado é como o seguinte:
> >>>>>
> >>>>> 1 o
> >>>>> 1 problema
> >>>>> 1 é
> >>>>> 1 que
> >>>>> 1 o
> >>>>> 1 resultado
> >>>>> 1 digo
> >>>>> 1 o
> >>>>> 1 resultado
> >>>>> 1 repito
> >>>>> 1 o
> >>>>> 1 resultado
> >>>>> 1 aparece
> >>>>> 1 assim
> >>>>>
> >>>>> ou seja, mesmo que tenha palavras repetidas no arquivo ele aparece
> >>>>>
> >> uma
> >>
> >>>>> ocorrência por linha precedido do 1.
> >>>>>
> >>>>> Então, como bom pai (do script), pergunto: "onde foi que eu errei?"
> >>>>>
> >>>>> Obrigado
> >>>>>
> >>>>> Helton
> >>>>>
> >>>>> [As partes desta mensagem que não continham texto foram removidas]
> >>>>>
> >>>>>
> >>>>>
> >>>>>
> >>>> [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
> >>>> ---------------------------------------------------------------------
> >>>> Servidor Newsgroup da lista: news.gmane.org
> >>>> Grupo: gmane.org.user-groups.programming.shell.brazil
> >>>>
> >>>> Links do Yahoo! Grupos
> >>>>
> >>>>
> >>>>
> >>>>
> >>> [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
> >>> ---------------------------------------------------------------------
> >>> Servidor Newsgroup da lista: news.gmane.org
> >>> Grupo: gmane.org.user-groups.programming.shell.brazil
> >>>
> >>> Links do Yahoo! Grupos
> >>>
> >>>
> >>>
> >>>
> >> [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
> >> ---------------------------------------------------------------------
> >> Servidor Newsgroup da lista: news.gmane.org
> >> Grupo: gmane.org.user-groups.programming.shell.brazil
> >>
> >> Links do Yahoo! Grupos
> >>
> >>
> >>
> >>
> >
> >
> > [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
> > ---------------------------------------------------------------------
> > Servidor Newsgroup da lista: news.gmane.org
> > Grupo: gmane.org.user-groups.programming.shell.brazil
> >
> > Links do Yahoo! Grupos
> >
> >
> >
> >
>
>
>
>
> ------------------------------------
>
> ---------------------------------------------------------------------
> 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
>
>
>


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



reply via email to

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