Converter CSV para Ldif

Publicado por Alexandro Felix 21/06/2007

[ Hits: 8.929 ]

Homepage: http://rideick.blogspot.com/

Download converteCsv.sh




Script para converter CSV para ldif.

Precisa de alguns ajustes para adequar a realidade do seu arquivo csv, pois dependendo de onde foi gerado o mesmo, as colunas variam e vc tem que pôr no esquema as variáveis definidas no arquivo.

Comigo deu certo e quebrou um galho imenso.

  



Esconder código-fonte

#!/bin/bash
#Para utililar o script você terá que instalar o dialog.
#Como adequar a realidade do seu arquivo CSV
#As variáveis f1, f2 e f... são correspondente as colunas do csv, por tanto basta que você posicione-as de acordo com o layout do arquivo que  você pode ver abaixo:

#f1 = dn:    (f2)   (f3)   (f4)
#(f11)
#(f12)
#(f8)
#sn: (f9)
#(f13)
#(f14)
#street: (f16) (f17)
#l: (f18)
#st: (f19)
#postalCode: (f20)
#objectClass: inetOrgPerson
#objectClass: top
#description: (f10)
#homePhone: (f15)


testaTrueFalse ()
{   
   if [ $? = 1 ]
   then
      exit
   fi
}

#inicializa variável onde o parâmetro é linha do comando head que será usado logo abaixo
cont=1 
#captura do teclado o arquivo a ser convertido
arquivo=$( dialog --stdout --inputbox 'Por favor digite o nome do arquivo CSV a ser convertido sem a extensão' 0 0 "arquivoCSV")

#Chama Função
testaTrueFalse

#define o delimitador
delimitador=$( dialog --stdout --inputbox 'Defina o delimitador de seu arquivo CSV. Ex: "," ";" caso o delimitador seja tabulação digite "t" (sem as aspas)' 0 0 "arquivoCSV")

#Chama Função
testaTrueFalse

#Expresão regular para retirar as aspas do arquivo CSV
sed '1,$s/"//g' $arquivo.csv > /tmp/$arquivo.csv

#Define o nome do arquivo resultante
arqResult=$( dialog --stdout --inputbox 'Digite o nome do arquivo resultante' 0 0 "arquivoLDIF")

#Chama Função
testaTrueFalse

rm $arqResult

while [ $cont -le 132 ]
   do

      #Definindo variáveis para impressão do arquivo
      f1=$(head -n$cont /tmp/$arquivo.csv | cut -f1 -d$delimitador | tail -n1)
      f2=$(head -n$cont /tmp/$arquivo.csv | cut -f2 -d$delimitador | tail -n1)
      f3=$(head -n$cont /tmp/$arquivo.csv | cut -f3 -d$delimitador | tail -n1)
      f4=$(head -n$cont /tmp/$arquivo.csv | cut -f4 -d$delimitador | tail -n1)
      f8=$(head -n$cont /tmp/$arquivo.csv | cut -f8 -d$delimitador | tail -n1)
      f9=$(head -n$cont /tmp/$arquivo.csv | cut -f9 -d$delimitador | tail -n1)
      f11=$(head -n$cont /tmp/$arquivo.csv | cut -f11 -d$delimitador | tail -n1)
      f12=$(head -n$cont /tmp/$arquivo.csv | cut -f12 -d$delimitador | tail -n1)
      f13=$(head -n$cont /tmp/$arquivo.csv | cut -f13 -d$delimitador | tail -n1)
      f14=$(head -n$cont /tmp/$arquivo.csv | cut -f14 -d$delimitador | tail -n1)   
      f15=$(head -n$cont /tmp/$arquivo.csv | cut -f15 -d$delimitador | tail -n1)
      f16=$(head -n$cont /tmp/$arquivo.csv | cut -f16 -d$delimitador | tail -n1)
      f17=$(head -n$cont /tmp/$arquivo.csv | cut -f17 -d$delimitador | tail -n1)
      f18=$(head -n$cont /tmp/$arquivo.csv | cut -f18 -d$delimitador | tail -n1)
      f19=$(head -n$cont /tmp/$arquivo.csv | cut -f19 -d$delimitador | tail -n1)
      #f20=`head -n$cont $arquivo.csv | cut -f20 -d, | tail -n1`
      #Iprimindo variáveis no arquivo resultante
      echo dn: $f1,$f2,$f3,$f4 >> $arqResult.ldif 
      echo givenName: $f11 >> $arqResult.ldif
      echo sn: $f12 >> $arqResult.ldif
      echo cn: $f8 >> $arqResult.ldif
      echo sn: $f9 >> $arqResult.ldif
      echo mail: $f13 >> $arqResult.ldif
      echo telephoneNumber$f14 >> $arqResult.ldif
      echo street: $f16 $f17 >> $arqResult.ldif
      echo l: $f18 >> $arqResult.ldif
      echo st: $f19 >> $arqResult.ldif
      echo postalCode: $f20 >> $arqResult.ldif
      echo objectClass: inetOrgPerson >> $arqResult.ldif
      echo objectClass: top >> $arqResult.ldif
      echo description: $f10 >> $arqResult.ldif
      echo homePhone: $f15 >> $arqResult.ldif
      #echo /n >> $arqResult.ldif
      cont=`expr $cont + 1`
   done
      
      #echo $arquivo.csv >> $arqResult.ldif
ls -s $arquiResult.ldif
#chama Função
testaTrueFalse
   
echo "Arquivo Gerado" $arqResult.ldif

Scripts recomendados

Postfix - Listar usuários com over quota

Script para rodar software Mr Bayes em paralelo

Backup de arquivos do Linux para um servidor FTP

Script de firewall

PS com gráficos por processo


  

Comentários
[1] Comentário enviado por rideick em 21/06/2007 - 15:11h

Errata!! Pessoal, o teste que o while faz é referente a qtd de contatos que existe no arquivo csv. Vocês pode facilitar isso transformando-o em uma variável!!

flw!!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts