[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [shell-script] CSV Parsing
From: |
Dorneles Treméa |
Subject: |
Re: [shell-script] CSV Parsing |
Date: |
Thu, 27 Mar 2003 15:47:53 -0300 |
User-agent: |
Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.3) Gecko/20030319 Debian/1.3-3 |
Oi Julio, Waldirio e pessoal,
> 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
mas bá tchê! Vivendo e aprendendo... :-)
Com a dica do Waldirio (thanks man!) eu já havia
conseguido resolver o problema, mas depois desta
sua mensagem estou pensando em reescrer o script,
valeu mesmo Júlio!
Só para efeito de 'recordação', esse é o bichinho,
que converte um arquivo exportado pelo MDaemon para
o formato do vpopmail, usando na migração para o
qmail...
--------------------------------------------
Duas primeiras linhas Arquivo CVS do MDaemon
--------------------------------------------
E-Mail_Address;Full_Name;Mailbox;Domain;Mail_Format;Msg_Count;Disk_Space;Forwarding_Address;Last_Access
address@hidden;Dorneles_Treméa;dorneles;tremea.com;RFC822;0;0;address@hidden,address@hidden;
...
-------------------
mdaemon2vpopmail.sh
-------------------
#!/bin/bash
#set -x
if [ ! $1 ]; then
echo "Sintaxe: `basename $0` arquivo [quota]"
echo "onde:"
echo " arquivo Nome do arquivo CSV exportado pelo MDaemon"
echo " quota Quota a ser atribuída para as contas de e-mail."
exit
fi
if [ `whoami` != "root" ]; then
echo "Você precisa ter permissão de 'root' para executar este comando."
exit
fi
if [ ! $2 ]; then
quota=NOQUOTA
else
quota=$2
fi
adddomain=/usr/local/vpopmail/bin/vadddomain
adduser=/usr/local/vpopmail/bin/vadduser
userinfo=/usr/local/vpopmail/bin/vuserinfo
echo "Processando:"
primeiro=1
while read linha ; do
if [ $primeiro -eq 1 ]; then
primeiro=0
else
email=`echo $linha | cut -f1 -d";"`
nome=`echo $linha | cut -f2 -d";"`
usuario=`echo $linha | cut -f3 -d";"`
forwards=(`echo $linha | tr "," " " | cut -f8 -d";"`)
echo "Endereço: $email"
#num_forwards=${#forwards[@]}
$adduser -q $quota -c "$nome" -n $email
diretorio=`$userinfo -d $email`
for forward in ${forwards[@]} ; do
echo " Forward: $forward"
echo "&$forward" >> $diretorio/../.qmail-$usuario
chown vpopmail.vchkpw $diretorio/../.qmail-$usuario
chmod 600 $diretorio/../.qmail-$usuario
done
fi
done < $1
--------------------
O troço já funciona a contento, mas sugestões didáticas
de como melhorá-lo são bem vindas... ;-)
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]