Pular para o conteúdo

Grep [RESOLVIDO]

Responder tópico
  • Denunciar
  • Indicar

1. Grep [RESOLVIDO]

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.





Responder tópico

2. Re: Grep [RESOLVIDO]

Melhor resposta

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]

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

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

4. Re: Grep [RESOLVIDO]

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]

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

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

6. Re: Grep [RESOLVIDO]

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]

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

grep -f strings_a_suprimir.txt -v arquivao_gigante.txt 

8. Re: Grep [RESOLVIDO]

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


Grato pela ajuda Paulo.

9. Re: Grep [RESOLVIDO]

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

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]

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]

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


Olá Paulo;

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

Abraços.

Responder tópico

Responder tópico

Entre na sua conta para responder.

Fazer login para responder