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
(http://subirimagen.me/uploads/20180618144118.png)
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
FIELDWIDTHSpara 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);}'(http://subirimagen.me/uploads/20180626043907.png)
Por favor, si os a realizado útil me gustaría saberlo, muchas gracias.
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
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;-) ;-)