pregunta AWK con /dev/urandom [SOLUCIONADO]

Iniciado por taisedekar, 18 Junio 2018, 21:45 PM

0 Miembros y 1 Visitante están viendo este tema.

taisedekar

Hola, estoy jugando un poco con el AWK y estaba creando un pequeño script para generar contraseñas o códigos con el /dev/urandoml. Sé que es más fácil con TR, FOLD, HEAD pero quisiera hacerlo solo con AWK.

el comando: cat /dev/urandom | awk 'BEGIN {FIELDWIDTHS="8 16 32"} {gsub(/[^a-zA-Z0-9]*/, "")}  {if (NR <=25) printf("|8:> %-10s| |16:> %-20s| |32:> %-20s|\n",$1, $2, $3);}'

Lo que hace en mostrar 3 columnas con códigos alfanuméricos pero de diferente longitud la 1ª columna de 8 caracteres 2ª columna 16 caracteres y la 3º de 32 caracteres.

El problema que tengo es en algunas líneas que por ejemplo en la primera columna solo muestra 2 caracteres o incluso ninguna


taisedekar

#1
Me auto respondo:

El pequeño problema que había era que cuando a obtener caracteres aleatorios también se cogía los de salto de linea y este lo interpretaba, lo que había es hacer es poner al AWK que caracteres de salto de linea a interpretar en mi caso ninguno

Pondremos las variables FS Y RS a Null, pero el script solo con poner las variables RS a null funciona ya que el FS esta interpretado con longitudes fijos con FIELDWIDTHS
para aclarar FS (fields separator, el caracter que separa los campos/columnas ) RS (row separator el caracter que separa el salto de linea/fila)

Comando: cat /dev/urandom | awk 'BEGIN {FS=""; RS=""; FIELDWIDTHS="8 16 32"} {gsub(/[^a-zA-Z0-9]*/, "")}  {if (NR <=25) printf("|8:> %-10s| |16:> %-20s| |32:> %-20s|\n",$1, $2, $3);}'



Por favor, si os a realizado útil me gustaría saberlo, muchas gracias.

animanegra

Por siacaso no estabas al tanto, para obtener números aleatorios desde el bash tambien tienes la variable $RANDOM que te devuelve aleatorios sin tener que hacer peripecias con la salida de /dev/urandom

42
No contesto mensajes por privado, si tienes alguna pregunta, consulta o petición plantéala en el foro para que se aproveche toda la comunidad.

taisedekar

#3
ok muchas gracias, aunque hay muchas formas más fácil de hacerlo que con AWK que es mucho más complicado. Pero hacerlo de esta forma se aprende un poco más con el AWK, para mi intentar conseguir realizar esta operación he conseguido aprender un poco más;-) ;-)