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