[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[xmanoel@usa.net: Script awk para el gasto telefónico...]



--- Begin Message ---
Hola!!

A ver, el fichero que he enviado funciona perfectamente, pero
necesitas utilizar el GNUawk (paquete gawk en vez del mawk, que viene
por defecto en Debian).  

Lo segundo es que hay que decirle al programa el fichero que hay que
leer:

       coste_telefonico /var/log/ppp.log

Y lo tercero, que si bien el ppp.log es muy buen fichero para llevar
el control de las llamadas tiene 2 problemas: no guarda el año de la
conexión (putada) y el sistema debian lo cambia cada semana, con lo
que es muy incómodo para llevar la contabilidad de los 2 últimos
meses. Yo lo que hago es crearme un fichero de resumen con las
llamadas que luego proceso con una versión modificada de este script.
(Si a alguien le interesa lo pongo aquí).

Ya para terminar, no es que lo haya hecho yo, pero mi script es
bastante más util que el pppcost (que tengo instalado en mi sistema
tambien) porque te especifica las diferentes llamadas y el coste para
cada una.

Pero bueno, no es un programa perfecto, para mí vale para salir del
paso. Si alguien está interesado aquí va una versión "light" (sin
comentarios, para ahorrar sitio).

-- 
Saudos:
><ose        xmanoel@usa.net        (Vigo/Galicia/España)
         http://pagina.de/xmanoel/
         http://w3.to/mikkeli/

01/04	Jazz great Charlie Mingus dies at 57 in Cuernavaca, Mexico, 1979
BEGIN {

ano=1997
id="infov­a"
tipo ="local"


iva = 0.16
coste = 5.7


pasos_iniciales["local"]=1
pasos_iniciales["provincial"]=2
pasos_iniciales["nacional"]=3

tarifa["local,reducida"]=240
tarifa["local,normal"]=180
tarifa["local,punta"]=180

tarifa["provincial,reducida"]=46
tarifa["provincial,normal"]=22.9
tarifa["provincial,punta"]=20

tarifa["nacional,reducida"]=20
tarifa["nacional,normal"]=10.7
tarifa["nacional,punta"]=7.2

}


/Serial connection established\./ {
              mes=int(index("NulJanFebMarAprMayJunJulAugSepOctNovDec",$1)/3)
              dia=$2
              split($3,x,":")
              hora=x[1]
              minuto=x[2]
              }
              

/Connection terminated\./ {
              dia_semana_v=dia_semana(dia, mes, ano)
              split($3,x,":")
	      duracion_v = duracion(hora, minuto, x[1], x[2])
	      duracion_minutos=duracion_v / 60  
	      pasos_v=pasos(dia_semana_v,hora,duracion_v,tipo)
              printf " D­a %6s Hora %6s Llamada a %10s   %5d min:  %3d pasos %-5.6g ptas\n"\
              ,dia"-"mes"-"ano,hora":"minuto,id,duracion_minutos\
              ,pasos_v,pesetas(pasos_v) 
	      }	



function duracion(hora_ini, minuto_ini, hora_fin, minuto_fin,     horas, minutos) {
              if ( hora_ini > hora_fin ) { horas = 24-hora_ini + hora_fin }
              else { horas = hora_fin - hora_ini }
              if ( minuto_ini > minuto_fin ) { minutos = 60-minuto_ini+minuto_fin  }
              else { minutos = minuto_fin - minuto_ini }
              return horas*60*60+minutos*60
              }
function pesetas(pasos) {
     return ( pasos * coste * (1+iva) )
     }
    

function pasos(dia_semana,hora,duracion,tipo,  tmp,pasos_v) {
      dia_semana=dia_semana+0
      hora=hora+0
      if (dia_semana == 6) {tmp="reducida"}
      else if (dia_semana == 5) {
             if (hora < 14 && hora >= 8 ) {tmp="punta"}
             else           {tmp="reducida"}
             }
      else { 
             if (hora < 17 && hora >= 8) {tmp="punta"}
             else if (hora >= 17 && hora < 22)  {tmp="normal"}
             else {tmp="reducida"}
           } 
      pasos_v=int(duracion/tarifa[tipo","tmp])
      if (duracion%tarifa[tipo","tmp] > 0) {pasos_v++}
      pasos_v=pasos_v+pasos_iniciales[tipo]
      return pasos_v
      }

function bisiesto(ano) {

      return (ano % 4 == 0) && (ano % 100 != 0) || (ano % 400 == 0)
      }

function dia_semana(dia, mes, ano,  ndias,i) {

    ndias = 0
    for (i=1970; i <= ano -1 ; i++){
         if (bisiesto(i)==1)   { ndias = ndias + (366 % 7)}
                            else { ndias = ndias + (365 % 7)}
         }
    for (i=1; i <= mes -1 ; i++)  {
            if (i==4||i==6||i==9||i==11) { ndias = ndias + 30 }
            else if (i==2)               { ndias = ndias + 28 }
            else                         { ndias = ndias + 31 }
        }
    if (bisiesto(ano) == 1) {
          if      (mes> 2)      { ndias = ndias +1 }
          }
    ndias = ndias + (dia - 1)
    return (ndias + 3) % 7
    }

--- End Message ---

Reply to: