[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
- RES: [shell-script] CSV Parsing,
Julio Cezar Neves - DATAPREVRJ <=