Você não acha óbvio? Você está apenas gerando uma string aleatória uma vez e armazenando-a na variável ran
e usando-a para todas as linhas!
Usando getline
em uma variável de um pipe
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
Quando você usa command | getline var
, a saída do comando é enviada por meio de um canal para getline()
e para a variável var
.
Observe também que quando um canal é aberto para saída, awk
lembra o comando associado a ele e as gravações subsequentes no comando são anexadas às gravações anteriores. Precisamos fazer uma chamada close()
explícita do comando para evitar isso.
Se as aspas simples aninhadas no str_generator
estiverem causando problemas, substitua pelo seu equivalente octal ( 7
)
awk '{
str_generator = "tr -dc 7[:alnum:]7 </dev/urandom | head -c 6"
str_generator | getline random_str
close(str_generator)
print "name " random_str " - " $0
}' file