RE: Script para Visualizar la cola de correos filtrada
> El Thu, 11 Sep 2008 17:45:51 +0200
> "Gorka" <gorkalinux@yahoo.es> escribi�:
>
> > Tengo postfix y trato de crear un script que me devuelva ?el p�rrafo
> > completo de cada mensaje?, en la cola mailq, donde el remitente
> cumpla
> > cierto patr�n. Mi problema es que quiero el p�rrafo completo, es
> decir, las
> > 3 l�neas, no s�lo la primera. No s� c�mo hacerlo. Adem�s luego los
> elimina,
> > esto �ltimo es muy f�cil.
> >
> > Me explico mejor, si tengo 30 mensajes encolados y dos proceden de
> > mimial@yahoo.es, quiero visualizar s�lo la informaci�n de estos dos y
> luego
> > borrarlos. As�:
> >
> > #./script.sh mimail@yahoo.es
> >
> > 8F464D38003 20534 Thu Sep 11 17:18:39 mimail@yahoo.es
> > (connect to correo.es[222.222.88.88]: Connection
> > refused)
> > p2@correo.es
> >
> > 035FFD38002 20546 Thu Sep 11 17:18:31 mimail@yahoo.es
> > (connect to correo.es[222.222.88.88]: Connection
> > refused)
> > p1@correo.es
> >
> > Se borraron 2 mensajes.
> >
> >
> > Mi c�digo, como pod�is ver no me visualiza la l�nea segunda y
> tercera.
> > Contenido de script.sh:
> >
> > #!/bin/bash
> >
> > #Visualiza
> > mailq | grep $1
> >
> > #Elimina
> > mailq | grep $1 | awk '{ print $1 }' | tr -d '*!' | postsuper -d -
> >
> > �C�mo puedo conseguirlo? �A lo mejor alguien ha ideado algo en perl?
> >
> >
> >
> >
>
> Tu problema es que tambi�n quieres mostrar las dos l�neas anteriores a
> la del patr�n encontrado, �no?. Para ello puedes usar el par�mtro -B
> (before) con grep
>
> #Visualiza
> mailq | grep -B 2 $1
>
> Hay bastante m�s ayuda en las p�ginas de manual.
>
Finalmente lo he resuelto con perl. Otro compañero del foro me pide el código. Aquí lo dejo, por si a alguien le sirve. Me hubiera gustado resolverlo sin necesidad de utilizar el fichero spam.txt, pero no he sabido cómo pasarle directamente el array de ids a postsuper. Hay otro hilo por ahí donde lancé esa duda. El código:
for (my $i=0;$i<=$#linea;$i++)
{
@fila = split (/\s+/,$linea[$i]);
if ($fila[2] eq "Mon" || $fila[2] eq "Tue" || $fila[2] eq "Wed" || $fila[2] eq "Thu" || $fila[2] eq "Fri" || $fila[2] eq "Sat" || $fila[2] eq "Sun")
{
if (index($fila[6],$patron) != -1)
{
#Archivar Id
push(@ids,$fila[0]);
#Archivar 4 lineas.
if ($#impresion <= 0)
{
push(@impresion,@linea[0]."\n");
}
push(@impresion,$linea[$i]);
push(@impresion,$linea[$i+1]);
push(@impresion,$linea[$i+2]);
push(@impresion,"\n");
$i = $i+3;
}else
{
#print STDOUT "No hay resultados para el patron <".$patron.">. \n\n";
}
}#si es la primera del trio
}#por linea
$coincidencias = $#ids+1;
push(@impresion,"$coincidencias coincidencias para el patron <".$patron.">. \n");
push(@impresion,"\n");
#Imprime coincidencias
for (my $i=0;$i<=$#impresion;$i++)
{
print $impresion[$i];
}
if ($coincidencias > 0)
{
print "\nEliminar [S/N]: ";
$respuesta = <STDIN>;
chop ($respuesta);
if ($respuesta eq "S")
{
#Elimina resultados de la busqueda.
open (OUT, ">", 'spam.txt') or die "Imposible abrir el archivo spam.txt";
for (my $i=0;$i<=$#ids;$i++)
{
print OUT $ids[$i],"\n";
}
close (OUT);
system "awk '{ print \$1 }' spam.txt | tr -d '*!' | postsuper -d -";
print "\n";
}else
{
print "\nOperacion cancelada.\n\n";
}
}#si hay coincidencias
Reply to: