Bueno, de nada, pero ahora te cuento... On Mon, Oct 26, 1998 at 12:09:24AM -0300, Phillip Neumann wrote: > Primero que nada gracias por la ayuda.... > La verdad es que no entiendo nada de perl, asique no se que hace el > script que me diste: > > #!/usr/bin/perl > (1) while (<>) { > (2) chomp; > (3) if (/Hoy\, \d* me he conectado/) { $conectado=$1 } > (4) if (/Hoy\, \d* me he desconectado) { $desconectado=$1 ; > > $x=$desconectado-$conectado if $ > desconectado > $conectado; > } > } > > print "\n Tiempo total=$tiempo"; > > > (1) while (<>) significa que haga los pasos 2,3,4 hasta que pase que?
El <> es equivalente a <STDIN> y la construcción es una simplificación de while ([EMAIL PROTECTED]<STDIN>) que quiere decir "mientras haya algo que leer de la entrada estándar" > (2) chomp: supongo que esto hace que lea algo... No, recorta la línea para que no tenga Ctrl-N al final. Sin parámetros actua por la variable por defecto ($@ si no recuerdo mal) > (3) if (/Hoy\, \d* me he conectado/) { $conectado=$1 } > > Esta parte me interesa... > si se cumple la condicion entre () se le asigna que valor a > $conectado? (que es $1??) Si te fijas se trata de una expresión regular, por eso ciertos caracteres (la coma, por ejemplo) va con una barra para quitarle el sentido que tiene en estas. El \d* significa cualquier número decimal. De hecho me he equivocado, debería ser (\d*) para que luego $1 tome el valor de la primera coincidencia de este valor, es decir, $1 valdrá lo que todos los números que haya dentro de la frase... > mi archivo /var/log/internet.log se ve asi: > > Hoy, 21 de Oct a las 08:09:19 PM, --------= connecion > Hoy, 21 de Oct a las 08:09:30 PM, --------= desconeccion > > Entoces como quedaria el script?? if (Hoy\, \d* --------= > connecion) {$conectado=$1} ??? Umm... primero pon (\d*) en lugar de eso. Segundo, los - creo que tienes que ponerlos con \-, aunque mira mejor la página de manula 'perlre'. Tercero, yo he supuesto que ponías la fecha en formato númerico (contando los segundos desde el 1 de enero de 1970) que se obtiene al hacer 'date +%s'. Si pones la fecha de 'date' entonces tienes luego que utilizar las funciones que te da PERL para fechas (man perlfunc) para convertirla a números y así poder restar diréctamente, que es lo que hago yo en el script. Si te fijas lo que hago es muy simple, es sólo coger los pares "conexión"/"desconexión" y acumular su diferencia en una variable que será la que, al final, dirá cuanto tiempo has estado conectado. > > > Estoy ancioso por acer funcional todo esto... todavia no puedo... ^^^ hacer ¿no? > > Gracias... > > PS: ahh y lo mas importante.. como hago funcional el script ? perl > scritp ?? > Dos opciones, lo haces ejecutable y pones directamente 'nombre_de_script' (la primera línea que deberá ser "#!/usr/bin/perl" indica el interprete), o lo haces con 'perl nombre_de_script' Saludete y suerte Javi