Tidakkah Anda berpikir itu agak jelas? Anda hanya menghasilkan string acak sekali dan menyimpannya dalam ran
variabel dan menggunakannya untuk semua baris!
Menggunakan getline
ke dalam variabel dari pipa
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
Ketika Anda menggunakan command | getline var
, output dari perintah dikirim melalui pipa ke getline()
dan ke dalam variabel var
.
Perhatikan juga ketika sebuah pipa dibuka untuk keluaran, awk
ingat perintah yang terkait dengannya, dan penulisan selanjutnya pada perintah ditambahkan ke tulisan sebelumnya. Kita perlu membuat close()
panggilan perintah secara eksplisit untuk mencegahnya.
Jika tanda kutip tunggal bersarang di dalam str_generator
menyebabkan masalah, ganti dengan ekivalen oktalnya ( \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
, akan lebih sederhana dan lebih efisien secara komputasi untuk digunakanpwgen -s 6 1
, atau lebih baik lagipwgen -s 6 $(wc -l myfile)
akan memberi Anda semua string acak yang Anda butuhkan, dalam satu kesempatan.