Converter CSV para Ldif

Publicado por Alexandro Felix 21/06/2007

[ Hits: 8.238 ]

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

Loadbalance FAILOVER V.2

Manutencao de arquivos no Squid-Cache

Gerar senhas aleatórias de qualquer tamanho

Repositório Local usando Yum

Knife System


  

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