[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [shell-script] help com manipulacao de arquivos
From: |
Thobias Salazar Trevisan |
Subject: |
Re: [shell-script] help com manipulacao de arquivos |
Date: |
Thu, 12 Jun 2003 12:35:43 -0300 (BRT) |
ae joao paulo,
On Wed, 11 Jun 2003, Joao Paulo Muller da Silva wrote:
> Seguinte, eu tenho um arquivo com varias palavras e agora que quero
> ver se essas palavras estao em um texto, tambem se estiver queria
> contar qts vezes essas palavras aparecem.
podemos usar o sed.
prompt> cat ./conta_palavra.sh
#!/bin/bash
#
# $1 = palavra
# $2 = arquivo
sed -n "
# se for a primeira linha zeramos o contador.
# o contador fica sempre no reserva
1{;x;s/^/0/;x;}
# se for a palavra que procuramos fizemos
/\b$1\b/{
:c
s/\b$1\b//;ta
# substituimos a palavra por nada, se ocorreu sucesso na substituição
# pulamos pro label a, senão, vamos pro label b
bb
# chegamos aqui se ocorreu sucesso na substituição. Assim pegamos o valor
# que esta no reserva e fizemos valor + 1
:a
x
# aqui comeca o algoritmo pra incrementar o numero
:p
s/9\(_*\)\$/_\1/;tp
s/^\(_*\)\$/0\1/;s/ \(_*\)\$/0\1/
s/8\(_*\)\$/9\1/;s/7\(_*\)\$/8\1/
s/6\(_*\)\$/7\1/;s/5\(_*\)\$/6\1/
s/4\(_*\)\$/5\1/;s/3\(_*\)\$/4\1/
s/2\(_*\)\$/3\1/;s/1\(_*\)\$/2\1/
s/0\(_*\)\$/1\1/;s/_/0/g
# como a palavra pode aparecer mais de 1x na mesma linha, pulamos pro label
# c pra ver se existe mais
x;tc
}
:b
# se for última linha, imprime o que tem no reserva (o contador)
\${x;p;}" < $2
#######################################################
testando
prompt> cat lixo
um
dois
um
tres
prompt> ./conta_palavra.sh sed lixo
0
prompt> ./conta_palavra.sh um lixo
2
prompt> ./conta_palavra.sh dois lixo
1
prompt> ./conta_palavra.sh o lixo
0
se quiser pegar sub-\?palavras retire o borda \b
falow
thobias
-------
echo 9446046325380026818553633794429812592304650P | dc
-------
http://www.lcp.coppe.ufrj.br/~thobias
____________________________
|
| Against - HTML Mail
| Against - MS ATTACHMENTS
|
----------------------------