[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Linhas repetidas
From: |
César A . K . Grossmann |
Subject: |
Re: Linhas repetidas |
Date: |
Thu, 12 May 2005 13:52:07 -0000 |
User-agent: |
eGroups-EW/0.82 |
--- Em address@hidden, "puffy_eta" <puffy_eta@p...>
escreveu
>
> tenho um arquivo no formato texto nessa configuração:
>
> 01/04/2005 15:00:00,12.4,0.60,0.70
> 01/04/2005 15:00:00,,,,,,,,
>
> quero eliminar a linha que tem o mesmo horario (15:00:00) e deixar a
> outra linha.Esse arquivo repete isso com horarios diferentes.
>
> Como faço para elimar uma das linhas pelo horario?
Pensando no seu problema, cheguei ao seguinte algoritmo:
ler linha
enquanto nao EOF
escreve linha
ler nova_linha
enquanto horario(nova_linha) = horario(linha) e nao EOF
ler nova_linha
fim enquanto
linha = nova_linha
fim enquanto
Agora é transformar isto em shell script (o script abaixo foi
"psicografado", ou seja, eu não escrevi e não testei, alguém pode
dizer se funciona?)...
#!/bin/bash
read linha
while 1
do
echo $linha
read nova_linha
while [ "${nova_linha%%,*}" == "${linha%%,*}" ]
do
read nova_linha
done
linha = $nova_linha
done
Se você chamar o script de filtro.sh, deve usá-lo da seguinte forma:
$ ./filtro.sh < arquivo_a_filtrar.txt
Mas talvez não seja esta a melhor solução. Digamos que todas as linhas
que você quer excluir tenham o formato que você apontou lá em cima:
data hora,,,,,,,,
Basicamente, o que você quer é excluir as linhas que tem ",,,,,,,,".
Um simples grep é capaz disto:
grep -v ",,,,,,,," arquivo_a_filtrar.txt
Se o número de vírgulas em seqüência é diferente para cada linha, você
vai ter que encontrar um denominador comum para poder usar o grep...
[]s
--
César A. K. Grossmann
http://www.LinuxByGrossmann.cjb.net/