[OT] script de parseo

Kibou sukoshi sukoshi.kibou en googlemail.com
Vie Sep 25 11:13:54 BST 2009


Hola listeros,

Aunque este no es el sitio más adecuado para preguntar por esto,
pienso que quizás haya alguien aqui que me pudiera echar un cable con
esto.

Estoy haciendo un script de parseo que tiene que sacar en limpio de un
log las sentencias SQL. Lo estoy haciendo con un script de bash usando
sed, grep y awk.
Se que con perl se podría hacer tambien, pero yo perl no lo se manejar.
Decir que awk no lo he usado mucho, y con sentencias complejas me
pierdo y sigo leyendo ejemplos y más ejemplos pero no doy con la
tecla.

Tengo mi archivo.sql como lo siguiente:

CREATE TABLE mdl_jclic_users (
id BIGINT(10) unsigned NOT NULL auto_increment,
user_name VARCHAR(80) NOT NULL DEFAULT '',
CONSTRAINT  PRIMARY KEY (id)
);
SELECT * FROM mdl_capabilities WHERE name LIKE 'mod/jclic:%'
SELECT r.*
FROM mdl_role r,
mdl_role_capabilities rc
WHERE rc.capability = 'moodle/legacy:student'
AND rc.roleid = r.id  AND rc.permission = '1'
INSERT INTO mdl_modules ( NAME, VERSION, CRON ) VALUES ( 'jclic',
2008110700, 0 );

Lo que quiero hacer es ELIMINAR los SELECT. Si se trata de una linea,
le hago un grep -v SELECT y listo. Pero cuando es más de una linea no
se como hacerlo.
Habia probado algo como esto, pero me da error de sintaxis, y es que
no doy con la tecla de cómo hacerlo con el awk:

awk '
if ($1 == "SELECT")
{
    getline
    while ( $1 != "INSERT INTO")
    {
        print $0
    }
}
' archivo.sql

Lo que quería hacer con el awk era:

Si encuentra CADENA1
entonces
{
            lea la siguiente linea
            While en esta nueva linea NO encuentra CADENA2
            {
                   borre esta cadena
            }
}

Si alguien me puede aportar alguna idea es bien recibida.

Un saludo.



Más información sobre la lista de distribución ubuntu-es