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

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



reply via email to

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