Leitura de arquivo

1. Leitura de arquivo

Leandro Moraes de Oliveira
lmoraes

(usa Slackware)

Enviado em 25/09/2008 - 12:10h

Oi galera preciso de uma ajuda. É o seguinte preciso passar um grep num arquivo filtrando aproximadamente 1000 strings, porém preciso que ele leia essa string de um arquivo de texto externo, como poderia fazer isso. Todo mês essa string muda por isso precisa ser flexivel. Após o filtro ele precisa direcionar para um arquivo de saída
Obrigado ;*


  


2. Re: Leitura de arquivo

Sandro Marcell
SMarcell

(usa Slackware)

Enviado em 25/09/2008 - 13:54h

Seria mais ou menos isso o que você procura:

$ cat filtro.txt alvo.txt | grep <string> | uniq > filtrado.txt

Exemplo:

$ cat filtro.txt
abc

$ cat alvo.txt
123
xyz
000
abc
mno
...

cat filtro.txt alvo.txt | grep abc | uniq > filtrado.txt

$ cat filtrado.txt
abc



3. Re: Leitura de arquivo

Leandro Moraes de Oliveira
lmoraes

(usa Slackware)

Enviado em 25/09/2008 - 14:39h

Não seria isso não Sandro, eu teria que criar um for pq a string filtradas deve estar dentro do arquivo seguindo todas as linhas.



4. Re: Leitura de arquivo

Geraldo José Ferreira Chagas Júnior
gjr_rj

(usa Debian)

Enviado em 25/09/2008 - 14:45h

Use
# grep --file=arqcomstr *.txt

ou suas combinações

# grep -l --file=arqcomstr *.txt
# grep -o --file=arqcomstr *.txt
# grep -o --file=arqcomstr *.txt | uniq
# grep -o --file=arqcomstr *.txt | uniq > textodestino

se quiser os arquivo que contenham ao menos uma das strings do arquivo




5. Re: Leitura de arquivo

Geraldo José Ferreira Chagas Júnior
gjr_rj

(usa Debian)

Enviado em 25/09/2008 - 14:50h

porém se quiser os arquivos que contenham todas as strings. Ai só sei fazer via script. Não sei se tem como fazer apenas com comandos, ou se fica tão rápido, pois o script vai eliminando os arquivos conforme as strings não vão sendo encontradas.

----------------- ngrep -------------
#!/bin/sh
if [ $# -le 1 ]; then
echo "Faltando parametro. $0 <a ser lido> <arquivos a ser buscado>"
exit
fi

l=""
for i in $@; do
if [ $i != $1 ]; then
l="$l $i"
fi
done

for o in $(cat $1); do
for t in $(grep -l $o $l); do
s="$s $t"
done
l=$s
s=""
done

echo $l

----------------------

sintaxe
# ./ngrep arqcomstr *
# ./ngrep arqcomstr *.txt
# ./ngrep arqcomstr *.txt > arqdestino
....

Esqueci de um detalhe no script, mas você pode alterar. Quando não acha a string, deveria abandonar logo.

algo como
...
done
if [ $s == "" ]; then
exit
fi
l=$s
...


6. Re: Leitura de arquivo

Leandro Moraes de Oliveira
lmoraes

(usa Slackware)

Enviado em 25/09/2008 - 15:52h

opa eaew josé testei o script que você enviou mas não funcionou não


7. Re: Leitura de arquivo

Geraldo José Ferreira Chagas Júnior
gjr_rj

(usa Debian)

Enviado em 25/09/2008 - 18:22h

Então não entendi o que você está querendo, pois testei e ele funciona da forma que eu esperava, ou seja, mostra todos os arquivos que contém todas as strings do arquivo texto.

O detalhe é que as strings tem que estar uma em cada linha, mas você pode fazer uma alteração para que não necessite estar cada uma em uma linha.

exemplo do funcionamento desse script.

arqstr
------
qqq
www
eee
rrr

arq1.txt
--------
qqq www

arq2.txt
--------
qqq www eee rrr

arq3
----
qqq bbb eee vvv rrr xxx www

# ./ngrep arqstr *.txt

resultado
arq2.txt

# ./ngrep arqstr *

resultado
arq2.txt arq3


8. Re: Leitura de arquivo

Denis Doria
thuck

(usa Debian)

Enviado em 25/09/2008 - 18:28h

#Quando o arquivo contém mais de uma string como filtro
while read LINE
do
grep $LINE arquivo_com_strings >> arquivo_de_saida

done < arquivo_com_o_filtros

#Se houver apenas um filtro
grep $(cat arquivo_com_o_filtro) arquivo_com_strings >> saida


9. Re: Leitura de arquivo

Geraldo José Ferreira Chagas Júnior
gjr_rj

(usa Debian)

Enviado em 25/09/2008 - 18:42h

mas desta forma thuck, bastaria o arquivo conter uma das string, o que parece não ser o caso.

seria o mesmo que fazer
grep --file=arquivo_com_o_filtro arquivo_com_strings



10. Re: Leitura de arquivo

Denis Doria
thuck

(usa Debian)

Enviado em 25/09/2008 - 18:49h

Pelo q entendi, ele tem dois arquivos. Um com uma string q muda de mês em mês e é o filtro, e um outro com ~1000 linhas que deverão ser filtradas de acordo com a string dada todo mês.
Se for isso, se é q não compreendi errado, oq fiz funciona normalmente.


thuck@thuck:~/teste/nn$ seq 1 10 >> lista
thuck@thuck:~/teste/nn$ echo 4 > filtro
thuck@thuck:~/teste/nn$ grep $(cat filtro) lista
4
thuck@thuck:~/teste/nn$ echo 5 >> filtro
thuck@thuck:~/teste/nn$ while read LINE; do grep $LINE lista; done < filtro
4
5

Talvez ambos não compreendemos oq ele quer realmente. E sim, no fundo é a mesma coisa.


11. Re: Leitura de arquivo

Geraldo José Ferreira Chagas Júnior
gjr_rj

(usa Debian)

Enviado em 25/09/2008 - 19:00h

É que eu entendi diferente. Entendi que ele teria um arquivo com filtros e esse arquivo mudaria e ele queria selecionar os arquivos que contivessem os filtros.

Agora relendo, não tenho certeza do que ele quer.

Veja o exemplo de funcionamento que eu postei, explica melhor o que eu entendi.

lmoraes se puder explicar melhor !!!!


12. Re: Leitura de arquivo

Leandro Moraes de Oliveira
lmoraes

(usa Slackware)

Enviado em 02/10/2008 - 09:37h

oi Thuck só dando um feedback era realmente isso que eu precisava.
Obrigado pela ajuda agora vou tentar melhorar um pouco esse script. Incrementando mais algumas coisas.

Valeu mesmo.
E Obrigado a todos que ajudaram tbm



  
01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts