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

[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/


reply via email to

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