各行にランダムな文字列を追加するには?

各行にランダムな文字列を追加するには?

実行時に各行にランダムな文字列を追加しようとしています。

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

おすすめ記事