ちょっとわかりやすいと思いませんか?ランダムな文字列を一度生成してran変数に保存し、すべての行で使用しているだけです!
getlineパイプから変数に使用する
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
を使用するcommand | getline varと、コマンドの出力がパイプを介しgetline()て変数に送信されますvar。
また、出力用にパイプが開かれawk、それに関連付けられたコマンドを記憶し、コマンドへの後続の書き込みが以前の書き込みに追加される場合にも注意してください。それclose()を防ぐために、コマンドを明示的に呼び出す必要があります。
内のネストされた一重引用符がstr_generator問題を引き起こしている場合は、その8進数に相当するものに置き換えます(\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を使用する方がよりシンプルで計算効率がpwgen -s 6 1良くpwgen -s 6 $(wc -l myfile)なりますが、必要なすべてのランダム文字列をワンショットで正確に提供できます。