shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Filtrar arquivos...


From: Eliphas Levy Theodoro
Subject: Re: [shell-script] Filtrar arquivos...
Date: Thu, 21 Dec 2000 22:57:52 -0200 (EST)

Luciano Machado Granella, @ 22:17:

> Os arquivos estão ordenados? Se estiverem, o trabalho será mais simples.
> Usando PERL, você poderia carregar os dois primeiros arquivos em dois
> vetores e comparar todo_mundo_1 com todo-mundo_2 e gerar um terceiro vetor
> só sem nomes repetidos. O arquivo db.txt vc carrega num quarto vetor a ser
> comparado com o terceiro vetor (1.txt + 2.txt sem repetição). O que estiver
> no quarto vetor (db.txt) e não estiver no terceiro vetor, deve ir para
> filtrado.txt.

Com certeza, sem ordenação vai dar um trabalho danado. Ordenando os
arquivos antes (com o sort), você pode usar o 'diff' pra fazer o
trabalho, bem fácil.

> Junior wrote:
>
> > Ola galera !
> > tenho 3 arquivos (1.txt, 2.txt, db.txt) contendo nomes
> > e fazer compracoes do tipo:
> > o conteudo de 1 que nao tiver em db jogo pra o filtrado.txt
> > o conteudo de 2 que nao tiver em db jogo pra o filtrado.txt
> > Porem o filtrado nao podera ter linhas repetidas...
> > Alguma luz ???

vamos ver se eu entendi essa:

$ cat arq1.txt
joao
maria
joaquim
jose
pedro
$ cat arq2.txt
manoel
paulo
marcelo
ana
luis

como você não quer diferenciação do que é do primeiro ou do segundo
arquivo, vamos juntar e ordenar, e jogar em um arquivo temporário:

$ sort arq1.txt arq2.txt > temp

vamor ordenar o db também, mas a saída pode ir direto para o diff:

$ sort db.txt | diff - temp
2d1
< eliphas
3a3
> joaquim
6a7
> marcelo

o arquivo "db.txt" tem o conteúdo do arq1 e arq2, menos joaquim e marcelo,
mais 'eliphas', só pra complicar; sendo que 'eliphas' está no primeiro
arquivo (sinal menor que), e os outros no segundo arquivo (maior que).

como queremos só o que tem no primeiro arquivo, vamos fazer um sed
esperto: "procure por linhas começando com '>', remova '> ' e imprima."

$ sort db.txt | diff - temp | sed -n '/^>/s/> //p'
joaquim
marcelo

prontinho. redirecione pra um arquivo:

$ sort db.txt | diff - temp | sed -n '/^>/s/> //p' > filtrado.txt

ah, você tem que ter certeza que o arquivo filtrado não tem repetições:

$ sort db.txt | diff - temp | sed -n '/^>/s/> //p' | sort -u > filtrado.txt

se eu entendi bem, é isso aí.

ah! esqueci de algo importante:

$ rm -f temp
não deixe lixo em casa ;)

sed u later,
-- 
./eliphas.sh -levy | vim -x -R -b -T screen -c 'screen -r' -
GNU-EMACS: Generally Not Used Except by Middle Aged Computer Scientists

Se os homens são todos iguais, porque as mulheres escolhem tanto?



reply via email to

[Prev in Thread] Current Thread [Next in Thread]