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