¿No crees que es un poco obvio? ¡Solo está generando una cadena aleatoria una vez y la almacena en ran
variable y la usa para todas las líneas!
Utilizando getline
en una variable de una tubería
awk '{
str_generator = "tr -dc '[:alnum:]' </dev/urandom | head -c 6"
str_generator | getline random_str
close(str_generator)
print "name " random_str " - " $0
}' file
Cuando lo usa command | getline var
, la salida del comando se envía a través de una tubería hacia getline()
y dentro de la variable var
.
También tenga en cuenta que cuando se abre una tubería para salida, awk
recuerda el comando asociado con él y las escrituras posteriores al comando se agregan a las escrituras anteriores. Necesitamos hacer una close()
llamada explícita del comando para evitar eso.
Si las comillas simples anidadas en el str_generator
están causando un problema, reemplace con su equivalente octal ( \047
)
awk '{
str_generator = "tr -dc \047[:alnum:]\047 </dev/urandom | head -c 6"
str_generator | getline random_str
close(str_generator)
print "name " random_str " - " $0
}' file
tr -dc '[:alnum:]' </dev/urandom | head -c 6
, sería más simple y computacionalmente más eficiente de usarpwgen -s 6 1
, o mejor aún,pwgen -s 6 $(wc -l myfile)
le dará exactamente todas las cadenas aleatorias que necesita, de una sola vez.