sábado, 15 de agosto de 2015

Convertir base de datos de texto a csv

Seguramente en los próximos años, cuando lea este post, terminaré lamentando mi ignorancia en el tema,
O, posiblemente, encuentre aquí la "chuleta" que me permita salir del paso.
Tarea número 1: aprender a usar sed. Claramente es la solución a este problema pero mi manejo del mismo es terriblemente básico.

Aquí el escenario:
Tengo un extracto de un sistema de biblioteca (OMP) que por las limitaciones del mismo no llega a cumplir las necesidades del momento (no se puede filtrar la salida por campos, no se puede seleccionar períodos, no se puede, no se puede, etc)
De este extracto, que termina siendo una página html con formato de base de datos semejante a vcf, tengo que obtener al menos un archivo csv.
Todo parece muy sencillo pero sin conocimiento no hay nigún programa ni conversor en linea que resuelva la necesidad.
Asi es que, de un archivo que tiene este formato:

Texto 
TL : 574.526.323 A327 Resultado 1 de 179
Autor : Albariño, Ricardo J
Título : Análisis de la fracción macrozoobentónica en un cuerpo lótico andino
Ocultar Detalles
Institución : Universidad Nacional del Comahue, Centro Regional Universitario Bariloche
Ciudad : San Carlos de Bariloche
Año : 1994
Páginas : 66 p
Descriptores : LIMNOLOGIA - PATAGONIA - TL -
Grado Académico : TL.
Tengo que obtener un archivo de campos separados por comas.
la forma en que lo logré es la siguiente:

quitamos las lineas vacías:
cat graduados.txt |sed -e '/^$/d'>grad.txt


Sacamos aquellos campos que generan conflicto y rompen el loop:
 grep -v Editorial grad.txt|grep -v Ciudad|grep -v Ocultar|grep -v Páginas>grad1.txt

concatenamos los campos separandolos con el caracter "@"
cat grad1.txt|sed '$!N;s/\n/@/;$!N;s/\n/@/;$!N;s/\n/@/;$!N;s/\n/@/;$!N;s/\n/@/;$!N;s/\n/@/;'>grad2.txt

Depuramos columnas con desprolijidades
 cat sacar.txt |awk '{print $1,$2,$7}'
Y ya tenemos nuestra base de datos para manippularla a placer y hacer estadísticas, etc,etc.

______________________________________________________

Esto no es un tutorial de "copy&paste" sino una bitacora que puede servir de ayuda

Fuentes:
https://jinetedeldragon.wordpress.com/2009/06/22/sed-en-una-linea-sed-one-liners-parte-i/

No hay comentarios: