Hola,
Primeramente felicitar a los usuarios de este foro , siempre os he utilizado como guia de referencia y recomendado para consulta de dudas.
Bueno mi problema es el siguiente, soy administrador de sistemas junior , y me han encomendado utilizar perl para "depurar un fichero" , este fichero tiene unas 60 mil líneas , exactamente es un export de Oracle, a continuación os muestro algunas lineas de este código,
REM CREATE TABLE "NUEVODW"."ABALON_CAMBIO_ESTADO_INST" ("ID_INSTALACION"
REM NUMBER, "CODIGO_INSTALACION" VARCHAR2(40), "ESTADO_ANTIGUO"
REM VARCHAR2(4), "ESTADO_NUEVO" VARCHAR2(4), "FECHA_CAMBIO" DATE,
REM "FECHA_DATOS" DATE) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
REM STORAGE(INITIAL 65536 FREELISTS 1 FREELIST GROUPS 1) TABLESPACE
REM "ABA_DATA" NOLOGGING NOCOMPRESS ;
~
lo que tengo que hacer es , crear un script que elimine del fichero , la frase azul tantas veces como aparezca, el único patrón que hay es la primera palabra STORAGE(INITIAL , y la última palabra 1) estas no siempre están en la misma línea, el resto de palabras que hay en el medio varían , por lo que me he visto obligado a pasar de SED y utilizar perl.
No soy ningun experto en perl , he hecho el script como lo hubiera hecho en C , tal vez ahí el problema, a continuación os muestro mi script.
#!/usr/bin/perl
my %hash;
open my $FICHERO, q[<], 'prueba.sql';
$s=0;
$i=0;
while (my $linea = <$FICHERO>) { #Abrimos while para linea
chomp $linea; #Eliminamos el último espacio
my @palabras = split " ", $linea; #Separamos en palabras
while ($s==0){ #Opción 1 del selector
if ( $palabras[$i] ne "STORAGE(INITIAL" )
{
print "$palabras[$i]\n";
print "estoy aqui $s\n";
$i=$i+1;
print "$i\n";
}
else
{
$s=1; #LLamamos la opcion 2
print "estoy en el else $s\n";
$i=$i+1;
}
}
while ($s==1){ #Opcion 2 del selector
if ($palabras[$i] ne "1)" ){
$s=1;
$i=$i+1;
}
else
{
$i=$i+1;
$s=0; #Invocamos la opción 1
}
}
}
close $FICHERO;