Hola a todos, recientemente he instalado pppcost para que monitoree el gasto telefónico en mis conexiones vía módem a Internet pero el fichero ~./pppcosts no refleja nada coherente, después de tres conexiónes de menos de 20 minutos cada una, este es su contenido:
[EMAIL PROTECTED] cat .pppcosts 3324 25 ¿Hay que ponerle alguna opción a pppcosts para que vuelque información a ~./pppcosts?, ¿qué significa lo contiene mi ~/.pppcosts?. Por cierto, cuando conecto mediante wmppp, y tengo previamente lanzado pppcosts, este último detecta bien cuando se produce la conexión pero el tiempo de conexión comienza con 30 segundos, igual estoy preguntando una idiotez porque es así como factura Telfónica pero, ¿por qué sucede esto?. Ya por último, alguien ha actualizado a mano el fichero "es-costs.c" con las tarifas actuales, por favor si esí que me lo mande pues no se de donde sacar todos los parámetros necesarios para actualizarlo yo. Si alguien conoce algún método mejor para vigilar el gasto telefónico, le agradecería que me lo contase, Xose Manoel me mandó el script que adjunto pero al intentar ejecutarlo me sucede lo siguiente: [EMAIL PROTECTED] coste_infovia awk: ./coste_infovia: line 87: syntax error at or near pasos awk: ./coste_infovia: line 104: syntax error at or near * awk: ./coste_infovia: line 108: syntax error at or near duracion awk: ./coste_infovia: line 152: runaway regular expression /tarifa[tip ... Saludos y gracias. -- Javier Viñuales Gutiérrez [EMAIL PROTECTED]
#!/usr/bin/awk -f BEGIN { ################################################################### # Definici¢n de variables necesarias para el programa # ################################################################### # no podemos sacar el año del log # por tanto tenemos que definirlo aquí ano=1997 # a donde hacemos la llamada id="infovía" # tarifa aplicable tipo ="local" # Coste del paso y iva aplicable iva = 0.16 coste = 5.7 # Datos para cada tipo de tarifa (duraci¢n del paso y pasos iniciales) 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 } # comienzo conexión /Comienzo Conexión/ { split($3,x,":") hora=x[1] minuto=x[2] } # final conexión /Fin Conexión/ { split($3,x,":") duracion_v = duracion(hora, minuto, x[1], x[2]) duracion_minutos=duracion_v / 60 dia_semana_v=int(index("NulMonTueWenThuFriSatSun",$1)/3) 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"\ ,$3,$2,id,duracion_minutos\ ,pasos_v,pesetas(pasos_v) } ################################################################## # Funciones necesarias para el funcionamiento del programa # ################################################################## ################################################################## # devuelve la duración en segundos dandole hora de inicio y # # fin de algun suceso # # # # uso: # # # # duracion(hora_ini, minuto_ini, hora_fin, minuto_fin) # # # # hora_ini, minuto_ini hora y minuto del comenzo # # hora_fin, minuto_fin hora y minuto del final # # # ################################################################## 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 ; horas = horas -1 } else { minutos = minuto_fin - minuto_ini } return horas*60*60+minutos*60 } function pesetas(pasos){ ################################################################### # devuelve el coste en pesetas de un n£mero de pasos # # # # uso: # # # # pesetas(pasos) # # # # pasos - un n£mero entero indicando el n£mero # # de pasos consumidos # # # # necesita las variables: # # # # coste - coste en pesetas de cada paso # # iva - iva en tanto por 1 (0.16) # # # ################################################################### return ( pasos * coste * (1+iva) ) } function pasos(dia_semana,hora,duracion,tipo, tmp,pasos_v) { ################################################################### # devuelve el n£mero de pasos consumidos en la llamada # # # # uso: # # # # pasos(dia_semana, hora, duracion, tipo) # # # # dia_semana: 0,1,2,3,4,6 (Lunes,Martes,....) # # hora: 9,20,0,14 (en formato 24 horas) # # duracion: 3612 (en segundos) # # tipo: "local", "provincial", "nacional" # # # # Adem s deben existir los arrays: # # # # pasos_iniciales["tipo"] (pasos inciales que cobra la CNTE) # # tarifa["tipo,tarifa"] (duraci¢n del paso para cada horario)# # # ################################################################### # Primero asignamos el tipo de tarifa ############################################ # convertimos los par metros a n£meros dia_semana=dia_semana+0 hora=hora+0 # si es domingo toda la tarifa es reducida if (dia_semana == 6) {tmp="reducida"} # si es s bado else if (dia_semana == 5) { # entre 8 y 14 horas tarifa punta if (hora < 14 && hora >= 8 ) {tmp="punta"} # si no reducida else {tmp="reducida"} } # para el resto de los d¡as de la semana else { # entre 8 y 17 horas tarifa punta if (hora < 17 && hora >= 8) {tmp="punta"} # entre 17 y 22 horas tarifa normal else if (hora >= 17 && hora < 22) {tmp="normal"} # en el resto del horario, tarifa reducida else {tmp="reducida"} } # Ahora vamos a calcular los pasos transcurridos ################################################ 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) { ################################################################### # utilizaci¢n: # # # # bisiesto (a¤o) # # # # a¤o (en formato de cuatro cifras, eg: 1997) # # # # devuelve: # # # # 0 - no es bisiesto # # 1 - es bisiesto # # # ################################################################### return (ano % 4 == 0) && (ano % 100 != 0) || (ano % 400 == 0) # es bisiesto si es divisible por 4 y no por 100 # o es divisible por 400 } function dia_semana(dia, mes, ano, ndias,i) { ################################################################# # devuelve el d¡a de la semana que era en una fecha determinada # # (s¢lo funciona con fechas mayores a 1970 y incluso m s all # # del 200) # # # # utilizaci¢n: # # # # dia_semana(dia,mes,a¤o) # # dia (1-31) # # mes (1-12) # # a¤o (1970-?) # # # # devuelve: # # # # un n£mero que quiere decir: # # # # 0 - Lunes # # 1 - Martes # # 2 - Miercoles # # 3 - Jueves # # 4 - Viernes # # 5 - Sabado # # 6 - Domingo # ################################################################# # contamos n£mero de d¡as que pasaron desde 1970 ndias = 0 # primero los a¤os for (i=1970; i <= ano -1 ; i++){ if (bisiesto(i)==1) { ndias = ndias + (366 % 7)} else { ndias = ndias + (365 % 7)} } # luego los meses 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 } } # si ese a¤o es bisiesto y estamos luego de febrero # hay que sumar un d¡a if (bisiesto(ano) == 1) { if (mes> 2) { ndias = ndias +1 } } # ahora sumamos los d¡as del mes ndias = ndias + (dia - 1) # el 1/1/1970 era jueves. por tanto return (ndias + 3) % 7 }