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

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

RES: [shell-script] CSV Parsing


From: Julio Cezar Neves - DATAPREVRJ
Subject: RES: [shell-script] CSV Parsing
Date: Thu, 27 Mar 2003 12:00:17 -0300

Olá Dorneles,
vc pode matar 2 coelhos com uma só cajadada fazendo:

OldIFS="$IFS"
IFS=";"

while read campo1 campo2 campo3
do
    echo "$campo1---$campo2---$campo3"
done < $1

Para ficar + legível poré menos otimizado, vc poderia fazer a leitura assim:

cat $1 |
while read campo1 campo2 campo3
do
    echo "$campo1---$campo2---$campo3"
done

Como vc deve saber o while é executado enquanto o cmd que o segue - neste
caso o read - seja bem sucedido, assim sendo, quando o cmd ler um EOF, o seu
código de retorno ($?) será != 0, saindo assim do loop. Veja só

Prompt> read lixo < /dev/null
Prompt> echo $?
1

Neste exemplo o /dev/null manda, de cara, um EOF para o read. Quando listei
o código de retorno, ele estava = 1, desta forma demonstrando o que falei no
parágrafo anterior.
[ ]s,
Julio Cezar Neves
-Eu Apoio o Software Livre-
-I Support Free Software-
* +55 21 2528-7070  /  9853-4044
*address@hidden


> -----Mensagem original-----
> De: Dorneles Treméa [mailto:address@hidden]
> Enviada em: quarta-feira, 26 de março de 2003 22:58
> Para: address@hidden
> Assunto: [shell-script] CSV Parsing
> 
> 
> Olá pessoal,
> 
> preciso de uma luz... :-)
> 
> Estou iniciando um script que vai parsear um
> arquivo CSV, na verdade separado por ";", e
> executar algums comandos dependendo do conteúdo.
> 
> O arquivo é composto por várias linhas no formato:
> 
> campo1;campo2;campo3;campoN
> 
> Eu estou tentando usar o $IFS para separar as
> linhas e depois as colunas, mas ainda não tive
> sucesso.
> 
> Primeiro problema: pegar linha a linha do arquivo.
> 
> ----------------------
> 
> old_IFS="$IFS"
> IFS="\012"
> 
> for linha in `cat $1` ; do
>   echo $linha
> done
> 
> IFS="$old_IFS"
> 
> ----------------------
> 
> Isso deveria mostrar cada uma das linhas certo?
> Mas não mostra... (devo estar errando em algo)
> 
> A minha ideia é pegar cada uma das linhas e passar
> para uma função.
> 
> Segundo teste: passar a linha para uma função
> que quebre os campos.
> 
> ----------------------
> 
> processa() {
>    /path/to/comando $1 $3
> }
> 
> for linha in `cat $1` ; do
>   processa $linha
> done
> 
> ----------------------
> 
> Onde eu chamo um comando usando apenas alguns dos
> campos passados.
> 
> Deve ser simples, mas eu devo ter perdido o cérebro
> essa semana em algum lugar... ;-)
> 
> Valeu.
> 
> T+
> 
> -- 
> 
> Dorneles Treméa
> Caxias do Sul - RS - Brasil
> +55 54 9114 9312 - UIN: 2413568
> X3ng Web Technology <http://www.x3ng.com.br>
> 
> -----BEGIN GEEK CODE BLOCK-----
> Version: 3.12
> GCS/IT d- s:->: a23 C+++ UBL++++$ P--- L++ E-- W+++
> N++ o? K? w+ O M+ V-- PS+ PE- Y-- PGP++ t+ 5 X++ R+
> tv+ b(++) DI+ D++ G+>+++ e++>++++ h---- r+++ y+++**
> ------END GEEK CODE BLOCK------
> 
> 
> 
> [As partes desta mensagem que não continham texto foram removidas]
> 
> 
> 
> ---------------------------------------------------------------------
> Esta lista não admite a abordagem de outras liguagens de 
> programação, como perl, C etc. Quem insistir em não seguir 
> esta regra será moderado sem prévio aviso.
> ---------------------------------------------------------------------
> Sair da lista: address@hidden
> ---------------------------------------------------------------------
> Esta lista é moderada de acordo com o previsto em 
http://www.listasdiscussao.cjb.net
---------------------------------------------------------------------
 

Seu uso do Yahoo! Grupos é sujeito às regras descritas em:
http://br.yahoo.com/info/utos.html 



reply via email to

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