[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?