--- /dev/null
+#!/usr/bin/perl -w
+#
+# Generador aleatorio de archivos de llamadas
+#
+# Leandro Lucarella - dom oct 17 18:37:05 ART 2004
+#
+# Bajo licencia GPL.
+#
+# Uso:
+# ./gencall.pl [cant_archivos [min_lineas [max_lineas]]]
+#
+# cant_archivos Cantidad de archivos a generar.
+#
+
+# Configuración
+$CANT_ARCHS=10;
+$MIN_LINEAS=1000;
+$MAX_LINEAS=5000;
+
+#{{{ Funciones
+
+#{{{ rnd() - Genera números aleatorios
+# Uso: rnd(MAX) - genera número de 0 a MAX (inclusive)
+# rnd(MIN, MAX) - genera número de MIN a MAX (inclusive)
+#
+# Nota: respeta el tamaño del campo más chico, es decir, si se usa rnd 01 250,
+# el número siempre tendrá al menos 2 dígitos rellenados con ceros, como
+# 04, 28, 123, 08, etc
+sub rnd($;$)
+{
+ my ($ini, $fin) = @_;
+ if (!$fin)
+ {
+ $fin = $ini;
+ $ini = 0;
+ }
+ return sprintf('%0'.length($ini).'d', $ini + rand() * ($fin - $ini + 1));
+}
+#}}}
+
+#{{{ Tipos de campos
+sub aaaa() { return rnd(1999, 2004); } # año
+sub mm() { return rnd("01", 12); } # mes
+sub dd() { return rnd("01", 28); } # día
+sub hh() { return rnd("00", 23); } # hora
+sub MM() { return rnd("00", 59); } # minutos
+sub DDDD() { return rnd("0000", 9999); } # código de central telefónica
+sub char() { return chr(rnd(65, 90)); } # caracter aleatorio
+#}}}
+
+#{{{ line() - Genera una línea del archivo
+sub line()
+{
+ my $f_linea = rnd(100000, 99999999);
+ my $f_minutos = rnd(1, 150);
+ my $f_fecha = aaaa().mm().dd();
+ my $f_hora = dd().hh().MM();
+ my ($f_tipo, $f_orig, $f_dest) = ('', '', '');
+ if (rnd(1) == 1)
+ {
+ $f_tipo = 'E';
+ $f_orig = char().char();
+ }
+ else
+ {
+ $f_tipo = 'S';
+ $f_dest = char().char();
+ }
+ my $f_prest = char().char().char().char().char().char().char().char().char();
+ return "$f_linea;$f_minutos;$f_fecha;$f_hora;$f_tipo;$f_dest;$f_orig;$f_prest";
+}
+#}}}
+
+#{{{ gen() - Genera un archivo con entre MIN y MAX llamadas
+# Uso: gen MIN MAX
+sub gen($$)
+{
+ my ($ini, $fin) = @_;
+ my $file = aaaa().mm().dd().hh().MM().'.'.DDDD();
+ # Mientras exista uno, buscamos un nuevo nombre.
+ $file = aaaa().mm().dd().hh().MM().'.'.DDDD() while (-e $file);
+ open(FH, ">$file") or die("No puedo abrir el archivo $file!\n");
+ for (my $i = rnd($ini, $fin); $i > 0; --$i)
+ {
+ print FH line()."\n";
+ }
+}
+#}}}
+
+#}}}
+
+#{{{ Programa
+srand;
+my $cant = $ARGV[0] ? $ARGV[0] : $CANT_ARCHS;
+for (my $i = 0; $i < $cant; ++$i)
+{
+ gen($ARGV[1] ? $ARGV[1] : $MIN_LINEAS, $ARGV[2] ? $ARGV[2] : $MAX_LINEAS);
+}
+#}}}
+
+# vim: set fdm=marker ts=4 sw=4 :
+++ /dev/null
-#!/bin/bash
-#
-# Generador aleatorio de archivos de llamadas
-#
-# Leandro Lucarella - dom oct 17 18:37:05 ART 2004
-#
-# Bajo licencia GPL.
-#
-
-#{{{ Funciones
-
-#{{{ ltrim() - Saca ceros de adelante
-# Uso: ltrim NUMERO
-ltrim()
-{
- echo -n $1 | sed 's/^0*//g'
-}
-#}}}
-
-#{{{ rnd() - Genera números aleatorios
-# Uso: rnd MAX - genera número de 0 a MAX (inclusive)
-# rnd MIN MAX - genera número de MIN a MAX (inclusive)
-#
-# Nota: respeta el tamaño del campo más chico, es decir, si se usa rnd 01 250,
-# el número siempre tendrá al menos 2 dígitos rellenados con ceros, como
-# 04, 28, 123, 08, etc
-rnd()
-{
- ini="$1"
- fin="$2"
- # Si no hay fin, ponemos ini como fin y 0 como ini.
- if [ -z "$fin" ]; then
- fin="$ini"
- ini=0
- else
- size=${#ini}
- fi
- ini=`ltrim $ini`
- fin=`ltrim $fin`
- [ -z $ini ] && ini=0 # si después del trim me quedé sin nada era un cero
- [ -z $fin ] && fin=0
- n=`date +%N` # obtengo los microsegundos de la fecha actual
- n=${n:0:6} # primero 6 digitos
- n=`ltrim $n`
- n2=`date +%N` # obtengo los microsegundos de la fecha actual
- n2=${n2:0:6} # primero 6 digitos
- n="$n$n2" # mi numero aleatorio de 12 digitos
- n=$(($ini + $n % ($fin + 1 - $ini))) # número aleatorio entre ini y fin
- if [ -n $size ]; then
- printf "%0${size}d" $n
- else
- echo -n $n
- fi
-}
-#}}}
-
-#{{{ chr() - Convierte un decimal a char
-chr()
-{
- echo -ne "\x`printf "%x" "$1"`"
-}
-#}}}
-
-#{{{ Tipos de campos
-aaaa() { rnd 1999 2004; } # año
-mm() { rnd 01 12; } # mes
-dd() { rnd 01 28; } # día
-hh() { rnd 00 23; } # hora
-MM() { rnd 00 59; } # minutos
-DDDD() { rnd 0000 9999; } # código de central telefónica
-char() { chr `rnd 65 90`; } # caracter aleatorio
-#}}}
-
-#{{{ line() - Genera una línea del archivo
-line()
-{
- f_linea=`rnd 100000 99999999`
- f_minutos=`rnd 1 150`
- f_fecha=$(aaaa;mm;dd)
- f_hora=$(dd;hh;MM)
- unset f_orig
- unset f_dest
- if [ `rnd 1` -eq 1 ]; then
- f_tipo=E
- f_orig=$(char;char)
- else
- f_tipo=S
- f_dest=$(char;char)
- fi
- f_prest=$(char;char;char;char;char;char;char;char;char;char)
- echo "$f_linea;$f_minutos;$f_fecha;$f_hora;$f_tipo;$f_dest;$f_orig;$f_prest"
-}
-#}}}
-
-#{{{ gen() - Genera un archivo con entre MIN y MAX llamadas
-# Uso: gen MIN MAX
-gen()
-{
- file="$(aaaa;mm;dd;hh;MM).$(DDDD)"
- [ -e $file ] && exit 1
- touch $file # creo archivo
- veces=$(rnd $1 $2)
- for i in $(seq $veces); do
- line >> $file
- done
-}
-#}}}
-
-#}}}
-
-# Configuración
-MIN_LINEAS=10
-MAX_LINEAS=50
-
-#{{{ Programa
-gen ${1:-$MIN_LINEAS} ${2:-$MAX_LINEAS}
-#}}}
-
-# vim: set fdm=marker ts=4 sw=4 :