¿No crees que es un poco obvio? ¡Simplemente está generando una cadena aleatoria una vez y almacenándola en la variable ran
y usándola para todas las líneas!
Uso de getline
en una variable desde 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 usa command | getline var
, la salida del comando se envía a través de una tubería a getline()
y a la variable var
.
También tenga en cuenta que cuando se abre una tubería para la salida, awk
recuerda el comando asociado con él, y las escrituras posteriores al comando se agregan a las escrituras anteriores. Necesitamos hacer una llamada explícita close()
del comando para evitar eso.
Si las comillas simples anidadas -en str_generator
están causando un problema, reemplácelas 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