Grep [RESOLVIDO]

1. Grep [RESOLVIDO]

Marcelo Matos
zwe

(usa Ubuntu)

Enviado em 02/10/2015 - 15:21h

Pessoal;

Boa Tarde!

Estou com um problema que não consigo entender. Tenho um arquivo com 32 mil palavras e tenho outro arquivo de LOG tratado. Gostaria de retirar dos LOG tratado todas as palavras que não contenha naquele arquivo de 32 mil palavras.

Sendo assim, criei este FOR, porem "parece" que ele apenas da um CAT no arquivo de LOG tratado, não executa o GREP:

for x in `cat dicionario.txt`; do grep -Pvi "$x" temporario/filtrato.txt; done

Também tentei assim:


for x in $path

do

for y in path2

do grep -Pvi "$x" "$y" >> temporario/filtrado1.txt

done

done

Obs: A variavel Path foi setado no script

Alguma luz?

Grande abraço e obrigado.







  


2. MELHOR RESPOSTA

Paulo
paulo1205

(usa Ubuntu)

Enviado em 06/10/2015 - 16:22h

zwe escreveu:

Até ai tudo bem, porem se eu colocar em nomes.txt uma palavra que comece com (de), ele não pega o decio. Sabe me dizer o porque?


Que comece com "de" ou igual a "de"?

O problema é que o grep (e seus derivados: egrep e fgrep) não trabalha com palavras, mas com pedaços de texto que só são limitados, além de pelo escopo de linha, pela regra de formação que você especificar. Se você quiser limitar a pegar palavras inteiras, e não pedaços de palavras, tem de caracterizar uma palavra usando a sintaxe que o grep lhe dá.

Eis como você poderia pegar a palavra "decio" com o egrep, ainda permitindo variações de maiúsculas e minúsculas.

egrep -i '(^|[[:space:][:punct:]])decio([[:space:][:punct:]]|$)' 


Explicação: os parênteses permitem escrever subexpressões. Dentro de cada subexpressão, eu usei a barra vertical para indicar alternativas exclusivas, mas que igualmente satisfazem a subexpressão como um todo. Por fim, os colchetes permitem especificar conjuntos de caracteres que igualmente satisfazem a busca se algum dos caracteres do conjunto for achado naquela posição. Dentro dos colchetes, para não ter de especificar cada caráter possível, pode-se especificar por nome uma classe de caracteres. Por fim, os carcateres “^” e “$” têm respectivamente os sentido de “início da linha” e “fim da linha”. Desse modo, a expressão acima significa que o egrep vai pegar (ou rejeitar, se você acrescentar um -v) a palavra "decio" que imediatamente suceda o início da linha ou um sinal de pontuação ou espaço, e que seja sucedida por um sinal de pontuação ou espaço ou pelo fim da linha.

3. Re: Grep [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 02/10/2015 - 17:09h

Estude sobre as opções -f e -v do grep.


4. Re: Grep [RESOLVIDO]

Marcelo Matos
zwe

(usa Ubuntu)

Enviado em 02/10/2015 - 17:15h


Olá Paulo;

No Grep já utilizei o -F e no exemplo acima contém o -v .

Grato.


5. Re: Grep [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 02/10/2015 - 17:17h

Eu não disse -F, mas sim -f.


6. Re: Grep [RESOLVIDO]

Marcelo Matos
zwe

(usa Ubuntu)

Enviado em 02/10/2015 - 17:24h

Ok Paulo, de prontidão o "-f" não resolveu meu problema, mais irei estudar mais sobre ele para entende-lo.

Grato.



7. Re: Grep [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 02/10/2015 - 17:26h

grep -f strings_a_suprimir.txt -v arquivao_gigante.txt 



8. Re: Grep [RESOLVIDO]

Marcelo Matos
zwe

(usa Ubuntu)

Enviado em 02/10/2015 - 18:47h


Grato pela ajuda Paulo.


9. Re: Grep [RESOLVIDO]

Marcelo Matos
zwe

(usa Ubuntu)

Enviado em 06/10/2015 - 13:47h


Paulo, blz?

Se possível, me tira uma dúvida, o grep -f e -v resolveu em partes meu problema. Criei duas listas para testar, uma lista chamada nomes.txt e outra lista filtrado.txt:

cat nomes.txt

marcelo
fabio
ricardo
decio

Cat filtrado.txt

marcelo
fabio

grep -f nomes.txt -v filtrado.txt

ricardo
decio

Até ai tudo bem, porem se eu colocar em nomes.txt uma palavra que comece com (de), ele não pega o decio. Sabe me dizer o porque?

Abraços.



10. Re: Grep

Marcelo Matos
zwe

(usa Ubuntu)

Enviado em 06/10/2015 - 15:48h

Caros;

Resolvi meu problema desta forma:

while read line; do egrep -v "$line" temporario/filtrado-old.txt; done < nomes.txt

Acredito que existem outras formas para fazer isso, mas esse foi meu jeito.

Grato.


11. Re: Grep [RESOLVIDO]

Marcelo Matos
zwe

(usa Ubuntu)

Enviado em 06/10/2015 - 15:49h

zwe escreveu:

Caros;

Resolvi meu problema desta forma:

while read line; do egrep -v "$line" temporario/filtrado-old.txt; done < nomes.txt

Acredito que existem outras formas para fazer isso, mas esse foi meu jeito.

Grato.







12. Re: Grep [RESOLVIDO]

Marcelo Matos
zwe

(usa Ubuntu)

Enviado em 06/10/2015 - 16:28h


Olá Paulo;

Entendi agora. Agradeço pela ajuda e atenção sobre.

Abraços.







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts