busca de palavras em dois arquivos [RESOLVIDO]

1. busca de palavras em dois arquivos [RESOLVIDO]

Laís
laisrmlc

(usa Outra)

Enviado em 12/04/2016 - 10:13h

Ola pessoal.
Sou nova em shell e gostaria da ajuda de vocês. Tenho dois arquivos, um contendo um texto e um contendo uma lista, exemplo:
lista.txt:

banana
pera
uva
laranja

texto.txt:

Hoje eu comi uma banana e uma laranja

Quero encontrar todas as palavras da lista.txt que não aparecem no texto. Se no caso eu encontrar as que aparecem já serve também.
Como posso fazer isso?


  


2. MELHOR RESPOSTA

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 15/04/2016 - 21:06h

laisrmlc escreveu:

Pessoal,
Todas as duas opções funcionaram, mas no caso eu gostaria de remover da lista, e não do texto.


Boa noite, laisrmlc.

O SCRIPT abaixo, pega as palavras de lista.txt, uma a uma.
Faz a busca em texto.txt, envia a "PALAVRA" com o Nº de vezes que "apareceu, para ESTATISTICAS.txt
Se não encontrar, o Nº de vezes é = "0"
Segue:

#COMEÇA NA LINHA ABAIXO#
#!/bin/bash

############################
# BUSCA_PALAVRAS.sh V_01 #
# Marcelo Oliver #
# Abril/2016 #
############################

> ESTATISTICAS.txt

MSG() {
(($NP)) || NP="0"
echo "$NP" "$palavra" >> ESTATISTICAS.txt
}

BUSCA_PALAVRA() {
NReg=$(awk 'END {print NR}' lista.txt)
for ((X=1;X<=$NReg;X++));do
palavra=$(sed -n "$X"p lista.txt)
if egrep -w --color "$palavra" texto.txt ;then
NP=$(egrep -wo "$palavra" texto.txt|wc -l)
MSG
unset NP
else
MSG
fi
done
}
BUSCA_PALAVRA
#TERMINA NA LINHA ACIMA#


OBS.:
Copie o SCRIPT acima, cole no seu editor de textos, salve e, não esqueça . . .
De permissão de execução:
chmod +x NOMEDOSCRIPT 

Altere o nome dos ARQUIVOS para o seu caso . . . :)

Após "rodar" o SCRIPT, veja as estatísticas com os comandos abaixo:
#PALAVRAS que CONSTAM em TEXTO.txt
awk 'BEGIN{OFS="\t";printf "\nNº\tPalavra\n\n";} /^[^0]/ {print $1,$2}' ESTATISTICAS.txt

#PALAVRAS que NÃO CONSTAM
awk 'BEGIN{printf "\nNão CONSTA:\n\n";} /^0/ {print $2}' ESTATISTICAS.txt

----------------------------------------------------------------------------------------
Se a resposta lhe ajudou, marque-a como a MELHOR, dessa forma, ganho uns pontos,
o que incentiva a continuar colaborando, ajudando, participando e compartilhando conhecimentos . . . :)
----------------------------------------------------------------------------------------
Att.:
Marcelo Oliver



3. Re: busca de palavras em dois arquivos

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 12/04/2016 - 10:52h

laisrmlc escreveu:
Ola pessoal.
Sou nova em shell e gostaria da ajuda de vocês. Tenho dois arquivos, um contendo um texto e um contendo uma lista, exemplo:
lista.txt:
banana
pera
uva
laranja

texto.txt:
Hoje eu comi uma banana e uma laranja

Quero encontrar todas as palavras da lista.txt que não aparecem no texto.
Se no caso eu encontrar as que aparecem já serve também.
Como posso fazer isso?


Bom dia, laisrmlc.
Para encontrar as palavras da lista.txt em texto.txt,
Faça:
words=$(cat lista.txt |xargs|sed 's/ /\|/g') 

egrep --color "$words" texto.txt 

SAíDA:
Hoje eu comi uma banana e uma laranja
OBS: As palavras da lista.txt são mostradas em outra cor.
Para mostrar SOMENTE as PALAVRAS, faça:
egrep -o "$words" texto.txt

Excluindo as palavras da lista.txt em texto.txt
words=$(cat lista.txt |xargs|sed 's/ /\\\|/g')
sed 's/'$words'//g;s/[ ]\+/ /g' texto.txt

SAíDA:
Hoje eu comi uma e uma
Trocando as palavras da lista.txt em texto.txt, por "EXCLUíDO"
sed 's/'$words'/\"EXCLUíDO\"/g;s/[ ]\+/ /g' texto.txt 

SAíDA:
Hoje eu comi uma "EXCLUíDO" e uma "EXCLUíDO"

É isso . . .

----------------------------------------------------------------------------------------
Se a resposta resolveu sua dúvida, marque-a como a MELHOR, dessa forma, ganho uns pontos,
o que incentiva a continuar colaborando, ajudando, participando e compartilhando conhecimentos . . . :)
----------------------------------------------------------------------------------------

Att.:
Marcelo





4. Re: busca de palavras em dois arquivos [RESOLVIDO]

Ronaldo Ferreira de Lima
textmode

(usa Slackware)

Enviado em 12/04/2016 - 17:09h

Veja se isto daqui serve:

grep -w -v -f < <(tr ' ' '\n' < texto.txt) lista.txt 


É bem pouco provável mas, dependendo do caso, até a definição de "palavra" vai
complicar o trabalho e este comando aí não irá servir.


5. Re: busca de palavras em dois arquivos [RESOLVIDO]

Laís
laisrmlc

(usa Outra)

Enviado em 15/04/2016 - 09:20h

Pessoal,

Todas as duas opções funcionaram, mas no caso eu gostaria de remover da lista, e não do texto.
A primeira opção dá pra inverter, mas pega palavras como a "e" que tem no texto e tira do meio das palavras. Como posso corrigir isso?



6. Re: busca de palavras em dois arquivos [RESOLVIDO]

Ronaldo Ferreira de Lima
textmode

(usa Slackware)

Enviado em 15/04/2016 - 09:47h

laisrmlc escreveu:
mas no caso eu gostaria de remover da lista, e não do texto.

Você precisar testar "palavra" por "palavra" contra o texto inteiro. Se
texto.txt couber na RAM, coloque cada "palavra" num array, de preferência
associativo, para depois testar se cada "palavra" de lista.txt existe no array,
se não existir, imprime. Se texto.txt for grande para caber na RAM, poderíamos
utilizar grep para varrer texto.txt a cada "palavra" de lista.txt, mas teremos
problemas de performance. Neste caso, se lista.txt couber na RAM, é melhor
carregar texto.txt aos poucos e testar o inverso, armazenando em variáveis se
encontrou ou não cada "palavra" de lista.txt, imprimindo no final.







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts