実行時に各行にランダムな文字列を追加しようとしています。
awk '{print "name" "'$ran'" "-"$0}' 'myfile'
その前にランダムな文字列を生成します。
ran="$(tr -dc '[:alnum:]' </dev/urandom | head -c 6)"
問題は、すべての行に対して同じランダムな文字列を印刷することです。
nameGQz3Ek-
nameGQz3Ek-
nameGQz3Ek-
各行に異なるランダムな文字列を取得するにはどうすればよいですか?
ベストアンサー1
これはちょっと明らかだと思いませんか?ランダムな文字列を一度生成して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