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

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



reply via email to

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