Verificar ficheros ‘VARTEXT’ (awk is your friend II).

Una de las formas frecuentes de cargar datos en Teradata (con fastload, multiload, bteq…) es a partir de ficheros de texto de longitud variable con un carácter separador de campos. Estos ficheros deben tener una estructura de campos coherente con la definición que hagamos en la herramienta de carga ( ‘DEFINE’ en fastload, ‘LAYOUT’ en multiload,’USING’ en bteq …). Pero a menudo ocurre que los ficheros son grandes y no es muy cómodo descubrir cuáles de sus filas no cumplen con las longitudes máximas de cada uno de los campos.

Aquí es donde awk puede ayudarnos de una forma rápida y simple.

Supongamos que tenemos un fichero cuyos registros deben cumplir una estructuta tipo ‘VARTEXT’ definida:

COL1  VARCHAR(7)
COL2  VARCHAR(110)
COL3  VARCHAR(120)
COL4  VARCHAR(44)
COL5  VARCHAR(9)
COL6  VARCHAR(15)
COL7  VARCHAR(6)
COL8  VARCHAR(5)
COL9  VARCHAR(8)
COL10 VARCHAR(3)

y que cuyo separador de campos es el ‘pipe’ (‘|’).

Para ver qué filas incumplen la estructura y nos darán problemas a la hora de cargarlas con la herramienta elegida (fastload, multiload, bteq…) podemos hacer simplemente:

awk 'BEGIN {FS = "|"}
        { v_rownumber+=1
                         if ( length($1)  >   7 ||
                              length($2)  > 110 ||
                              length($3)  > 120 ||
                              length($4)  >  44 ||
                              length($5)  >   9 ||
                              length($6)  >  15 ||
                              length($7)  >   6 ||
                              length($8)  >   5 ||
                              length($9)  >   8 ||
                              length($10) >   3 ) 
                            { v_errnumber+=1
                              printf "La fila %i tiene formato erróneo:%s\n", v_rownumber, $0
                            }
        }
     END { printf "Se han encontrado %i líneas erróneas de un total de %i leídas.\n", v_errnumber, v_rownumber }
    ' ruta/fichero_vartext_a_cargar.txt

La salida del proceso nos mostrará todas las filas que desborden el tamaño de cualquiera de los campos definidos. Con un poco más de código, también se puede hacer que además muestre qué campos son los que fallan.

Saludos.

Carlos.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: