[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: help com manipulacao de arquivos
From: |
cesarakg |
Subject: |
Re: help com manipulacao de arquivos |
Date: |
Thu, 19 Jun 2003 02:11:11 -0000 |
User-agent: |
eGroups-EW/0.82 |
--- Em address@hidden, Joao Paulo Muller da Silva
<jpsilva@a...> escreveu
>
> 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.
Supondo que o arquivo "palavras.txt" contenha as palavras a serem
encontradas, e o arquivo que estamos querendo "contabilizar" chama-se
"teste.txt", o seguinte comando faz o serviço:
$ cat teste.txt | xargs -n1 | sort | uniq -c | grep -w -i -f palavras.txt
Se o arquivo "teste.txt" contém pontuação, podemos eliminar a mesma
usando o comando "tr":
$ cat teste.txt | tr --delete [:punct:] | xargs -n1 | sort | uniq -c |
grep -w -i -f palavras.txt
Como funciona? O comando xargs, com o parâmetro '-n1', coloca uma
palavra por linha, o resto é mais ou menos direto, exceto por alguns
parâmetros: o '-c' no uniq faz com que ele inclua, na frente da linha,
a contagem de repetições da mesma; o '-f' do grep usa as expressões
regulares que estão em um arquivo, e o '-w' do mesmo grep faz com que
a combinação seja feita com palavras inteiras.
A título de exemplo, suponhamos que os arquivos 'teste.txt' e
'palavras.txt' sejam os seguintes:
--------- teste.txt ---------
Este é um texto para teste do comando
fmt.
Esta linha será unida à linha anterior
para formar um só parágrafo.
Esta linha será mantida em um parágrafo à parte, ou seja, como
ela tem
duas linhas em branco separando-a do outro parágrafo, o fmt entende
que se trata de outro parágrafo.
--------- teste.txt ---------
--------- palavras.txt ---------
linha
parte
teste
parágrafo
fmt
--------- palavras.txt ---------
$ cat teste.txt | tr --delete [:punct:] | xargs -n1 | sort | uniq -c |
grep -w -i -f palavras.txt
2 fmt
3 linha
4 parágrafo
1 parte
1 teste
Uma sugestão para melhoramento do "one-liner" seria colocar o "grep"
antes do "sort", assim o comando "sort" seria executado sobre menos
linhas (imagino que melhoraria a performance para arquivos extensos):
$ cat teste.txt | tr --delete [:punct:] | xargs -n1 | grep -w -i -f
palavras.txt | sort | uniq -c
2 fmt
3 linha
4 parágrafo
1 parte
1 teste
[]s
--
Cesar A. K. Grossmann - address@hidden
http://www.LinuxByGrossmann.cjb.net/
Spread the Word - http://www.brokensaints.com/