Loop no grep [RESOLVIDO]

1. Loop no grep [RESOLVIDO]

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 04/07/2017 - 19:51h

Pessoas .... tenho um arquivo "A" com 61 palavras na coluna 1 ... como faço um loop para o grep procurar elas no arquivo "B" ... caso encontre escreva as encontradas no arquivo "C" !!!


  


2. MELHOR RESPOSTA

Perfil removido
removido

(usa Nenhuma)

Enviado em 04/07/2017 - 22:08h

Pera, o arquivo B, no caso, contem texto ou uma palavra por linha?
Se for uma palavra por linha dá pra usar o "grep -x" assim ele não pega palavra compostas. Testa mais uma vez:
for palavras in `cat arqA.txt | awk '{print $1}'`; do grep -x $palavras arqB.txt >> arqC.txt; done 


3. Re: Loop no grep

Perfil removido
removido

(usa Nenhuma)

Enviado em 04/07/2017 - 20:37h

Mauriciodez escreveu:

Pessoas .... tenho um arquivo "A" com 61 palavras na coluna 1 ... como faço um loop para o grep procurar elas no arquivo "B" ... caso encontre escreva as encontradas no arquivo "C" !!!


for palavras in `cat arqA.txt | awk '{print $1}'`; do grep -o $palavras arqB.txt >> arqC.txt; done 

Obs: Considerando que "arqA.txt" possui colunas separadas por espaços, se for usar outro separador use -F"separador" no comando awk.


4. Re: Loop no grep [RESOLVIDO]

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 04/07/2017 - 21:01h

PauloHAC escreveu:

Mauriciodez escreveu:

Pessoas .... tenho um arquivo "A" com 61 palavras na coluna 1 ... como faço um loop para o grep procurar elas no arquivo "B" ... caso encontre escreva as encontradas no arquivo "C" !!!


for palavras in `cat arqA.txt | awk '{print $1}'`; do grep -o $palavras arqB.txt >> arqC.txt; done 

Obs: Considerando que "arqA.txt" possui colunas separadas por espaços, se for usar outro separador use -F"separador" no comando awk.


velho ... funcionou não ... ele copiou as palavras que tem partes da outra tb ... eu preciso só das ocorrencias exatas ... tipo, se eu tenho em arqA.txt "mauricio" ... eu preciso que ele copie para o arqC.txt só se ele encontrar "mauricio" ... que ignore as outras q tem mauricio ... tipo mauricio_1, mauricio_2, kdk11mauricio



------------------------------------------| Linux User #621728 |-----------------------------------------
" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"
------------------------------------------| Linux User #621728 |-----------------------------------------



5. Re: Loop no grep

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 04/07/2017 - 21:38h

Mauriciodez escreveu:

Pessoas .... tenho um arquivo "A" com 61 palavras na coluna 1 ... como faço um loop para o grep procurar elas no arquivo "B" ... caso encontre escreva as encontradas no arquivo "C" !!!


Boa noite Mauricio.
Segue:
while read line;do
grep "$line" ARQUIVO_B >> ARQUIVO_C
done<ARQUIVO_A


Att.:
Marcelo Oliver


6. Re: Loop no grep [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 04/07/2017 - 21:50h

Mauriciodez escreveu:

velho ... funcionou não ... ele copiou as palavras que tem partes da outra tb ... eu preciso só das ocorrencias exatas ... tipo, se eu tenho em arqA.txt "mauricio" ... eu preciso que ele copie para o arqC.txt só se ele encontrar "mauricio" ... que ignore as outras q tem mauricio ... tipo mauricio_1, mauricio_2, kdk11mauricio



Ok, acho que basta usar a opção "-w" no grep que resolve seu problema. Tenta de novo:
for palavras in `cat arqA.txt | awk '{print $1}'`; do grep -wo $palavras arqB.txt >> arqC.txt; done 



7. Re: Loop no grep [RESOLVIDO]

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 04/07/2017 - 21:56h

msoliver escreveu:

Mauriciodez escreveu:

Pessoas .... tenho um arquivo "A" com 61 palavras na coluna 1 ... como faço um loop para o grep procurar elas no arquivo "B" ... caso encontre escreva as encontradas no arquivo "C" !!!


Boa noite Mauricio.
Segue:
while read line;do
grep "$line" ARQUIVO_B >> ARQUIVO_C
done<ARQUIVO_A


Att.:
Marcelo Oliver


velho .. tb não rolou ... ele buscou a string no meio das outras tb ... tipo, no arquivo A tenho a palavra "files" ... ele retornou no arquivo C as ocorrencias

base-files
desktop-file-utils
file
libxkbfile1


só era para ter buscado a ocorrencia exata, no caso a 3ª ... dei um jeito aqui ... coloquei no inicio e no final o caractere "|" ... agora ao invés de buscar por "file" ele busca por "|file|".



------------------------------------------| Linux User #621728 |-----------------------------------------
" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"
------------------------------------------| Linux User #621728 |-----------------------------------------



8. Re: Loop no grep [RESOLVIDO]

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 04/07/2017 - 21:59h

PauloHAC escreveu:

Ok, acho que basta usar a opção "-w" no grep que resolve seu problema. Tenta de novo:
for palavras in `cat arqA.txt | awk '{print $1}'`; do grep -wo $palavras arqB.txt >> arqC.txt; done 


eu já tinha tentado isso tb ... não rola !!! a única coisa q ele faz é suprimir a saída .. continua trazendo várias ocorrencias !!



------------------------------------------| Linux User #621728 |-----------------------------------------
" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"
------------------------------------------| Linux User #621728 |-----------------------------------------



9. Re: Loop no grep

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 04/07/2017 - 22:19h

Mauriciodez escreveu:

msoliver escreveu:

Mauriciodez escreveu:

Pessoas .... tenho um arquivo "A" com 61 palavras na coluna 1 ... como faço um loop para o grep procurar elas no arquivo "B" ... caso encontre escreva as encontradas no arquivo "C" !!!


Boa noite Mauricio.
Segue:
while read line;do
grep "$line" ARQUIVO_B >> ARQUIVO_C
done<ARQUIVO_A


Att.:
Marcelo Oliver


velho .. tb não rolou ... ele buscou a string no meio das outras tb ... tipo, no arquivo A tenho a palavra "files" ... ele retornou no arquivo C as ocorrencias

base-files
desktop-file-utils
file
libxkbfile1


só era para ter buscado a ocorrencia exata, no caso a 3ª ... dei um jeito aqui ... coloquei no inicio e no final o caractere "|" ... agora ao invés de buscar por "file" ele busca por "|file|".



------------------------------------------| Linux User #621728 |-----------------------------------------
" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"
------------------------------------------| Linux User #621728 |-----------------------------------------


Mauricio, é só uma pequena alteração . . .
Segue:
while read line;do
grep -o "\b$line\b" ARQUIVO_B >> ARQUIVO_C
done<ARQUIVO_A




10. Re: Loop no grep [RESOLVIDO]

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 04/07/2017 - 22:30h

PauloHAC escreveu:

Pera, o arquivo B, no caso, contem texto ou uma palavra por linha?
Se for uma palavra por linha dá pra usar o "grep -x" assim ele não pega palavra compostas. Testa mais uma vez:
for palavras in `cat arqA.txt | awk '{print $1}'`; do grep -x $palavras arqB.txt >> arqC.txt; done 


deu certo com o parametro "x" no grep

mauricio@phantom ~ $ cat a
mauricio
paiva
mauricio@phantom ~ $ cat b
123mauricio
mauricio123
_paiva
mauricio-mauricio
mauricio_75
mauriciopaiva
mauricio_paiva
mauricio
paiva_mauricio
paivapaiva
mauricio@phantom ~ $ for palavras in `cat a`; do grep -x $palavras b >> c; done
mauricio@phantom ~ $ cat c
mauricio
mauricio@phantom ~ $




------------------------------------------| Linux User #621728 |-----------------------------------------
" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"
------------------------------------------| Linux User #621728 |-----------------------------------------



11. Re: Loop no grep [RESOLVIDO]

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 04/07/2017 - 22:36h

msoliver escreveu:
Mauricio, é só uma pequena alteração . . .
Segue:
while read line;do
grep -o "\b$line\b" ARQUIVO_B >> ARQUIVO_C
done<ARQUIVO_A



não deu tb não Marcelo

mauricio@phantom ~ $ cat a
mauricio
paiva
mauricio@phantom ~ $ cat b
123mauricio
mauricio123
_paiva
mauricio-mauricio
mauricio_75
mauriciopaiva
mauricio_paiva
mauricio
paiva_mauricio
paivapaiva
mauricio@phantom ~ $ cat sh.sh
#!/bin/bash
while read line;do
grep -o "\b$line\b" b >> c
done<a
mauricio@phantom ~ $ ./sh.sh
mauricio@phantom ~ $ cat c
mauricio
mauricio
mauricio
mauricio@phantom ~ $




------------------------------------------| Linux User #621728 |-----------------------------------------
" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"
------------------------------------------| Linux User #621728 |-----------------------------------------







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts