My favorites | Sign in
Project Home Downloads Wiki Issues Source
Checkout   Browse   Changes    
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# ----------------------------------------------------------------------------
# Conta o número de vezes que cada palavra aparece em um texto.
#
# Opções: -i Trata maiúsculas e minúsculas como iguais, FOO = Foo = foo
# -n NÚM Mostra apenas as NÚM palavras mais frequentes
#
# Uso: zzcontapalavras [-i] [-n N] [arquivo(s)]
# Ex.: zzcontapalavras arquivo.txt
# zzcontapalavras -i arquivo.txt
# zzcontapalavras -i -n 10 /etc/passwd
# cat arquivo.txt | zzcontapalavras
#
# Autor: Aurelio Marinho Jargas, www.aurelio.net
# Desde: 2011-05-07
# Versão: 1
# Licença: GPL
# Requisitos: zzminusculas
# ----------------------------------------------------------------------------
zzcontapalavras ()
{
zzzz -h contapalavras "$1" && return

local ignore_case
local tab=$(printf '\t')
local limite='$'

# Opções de linha de comando
while [ "${1#-}" != "$1" ]
do
case "$1" in
-i)
ignore_case=1
shift
;;
-n)
limite="$2"
shift
shift
;;
*)
break
;;
esac
done

# Arquivos via STDIN ou argumentos
zztool file_stdin "$@" |

# Remove caracteres que não são parte de palavras
sed 's/[^A-Za-z0-9ÀàÁáÂâÃãÉéÊêÍíÓóÔôÕõÚúÇç_-]/ /g' |

# Deixa uma palavra por linha, formando uma lista
tr -s ' ' '\n' |

# Converte tudo pra minúsculas?
if test -n "$ignore_case"
then
zzminusculas
else
cat -
fi |

# Limpa a lista de palavras
sed '
# Remove linhas em branco
/^$/d

# Remove linhas somente com números e traços
/^[0-9_-][0-9_-]*$/d
' |

# Faz a contagem com o uniq -c
sort |
uniq -c |

# Ordena o resultado, primeiro vem a de maior contagem
sort -n -r |

# Temos limite no número de resultados?
sed "$limite q" |

# Formata o resultado para Número-Tab-Palavra
sed "s/^[ $tab]*\([0-9]\{1,\}\)[ $tab]\{1,\}\(.*\)/\1$tab\2/"
}

Change log

r710 by aureliojargas on Mar 29, 2012   Diff
SEGURANÇA: $1 colocado entre aspas na
chamada padrão zzzz -h de todas as
funções.
Go to: 
Sign in to write a code review

Older revisions

r691 by aureliojargas on Mar 29, 2012   Diff
lint: padronizado o comentário para a
chamada de zztool file_stdin.
r662 by aureliojargas on Mar 28, 2012   Diff
SEGURANÇA: Execução mais segura, agora
usando zztool file_stdin em vez de $@
em algumas funções: zzansi2html,
zzcontapalavras, zzlimpalixo,
zzunescape, zzunicode2ascii.
...
r660 by aureliojargas on Mar 23, 2012   Diff
zzcontapalavras: arrumada a linha Uso:
All revisions of this file

File info

Size: 1883 bytes, 84 lines
Powered by Google Project Hosting