Sistemas

Extraer vcards individuales de un único fichero

En ocasiones se plantean problemas que se pueden solucionar con una simple orden o con algún aplicativo. Pero también puede suceder que no te acuerdes de la orden y no quieras instalar software alguno. En ese caso es posible acudir a el siempre omnipresente bash.

Por ejemplo, en caso de que sea necesario obtener ficheros .vcf (vcard) individuales de un único archivo, y no que no queramos hacer uso de comandos ultracomplejos, podemos programar un sencillo script bash.

El siguiente script, por supuesto, se puede parametrizar, controlar errores, bla, bla, bla.

# Script que tomando como origen un único fichero .vcf, crea tantos archivos como vcards individuales 
# contenga. Hace uso de que el comienzo y final de cada contacto está acotado con una cadena.

# En VECES se almacena la candidad de vcards individuales
VECES=`grep -n 'END:VCARD' ~/scripts/svcards/10000.vcf | wc -l`

echo
echo Creando $VECES ficheros VCARD
echo

# Bucle que recorre las VCARDs.
# Con head se obtiene el primer vcard y con tail el resto que almacena en el mismo archivo
# origen.
i=0
while [  $i -lt $VECES ]; do
        echo Generando VCARD: $i
        PRIMER_FINAL=`grep -n 'END:VCARD' -m 1 ~/scripts/svcards/10000.vcf | cut -f1 -d':'`
        FIN=`wc -l ~/scripts/svcards/10000.vcf | cut -f1 -d' '`
        DIFF=`echo $FIN-$PRIMER_FINAL | bc`

        echo $PRIMER_FINAL
        echo $FIN
        echo $DIFF

        head -$PRIMER_FINAL ~/scripts/svcards/10000.vcf > $i.vcf
        tail -n $DIFF ~/scripts/svcards/10000.vcf > ~/scripts/svcards/10000aux.vcf
        cp --preserve ~/scripts/svcards/10000aux.vcf ~/scripts/svcards/10000.vcf

        let i+=1
done

echo
echo Generación de VCARDs finalizada

 

Deja una respuesta