Biraz açık olduğunu düşünmüyor musun? Sadece bir kez rastgele dize üretiyorsunuz ve randeğişkente saklıyorsunuz ve tüm satırlar için kullanıyorsunuz!
getlineBir borudan bir değişkene kullanma
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
Kullandığınızda command | getline var, komutun çıktısı bir borudan getline()değişkene ve değişkene gönderilir var.
Ayrıca, bir boru çıkış için açıldığında, awkonunla ilişkili komutu hatırlar ve komutun sonraki yazmalarına önceki yazmalara eklenir. Bunu close()önlemek için komutun açıkça çağrılması gerekir .
İçindeki iç içe yerleştirilmiş tek tırnaklar str_generatorsoruna neden oluyorsa, sekizli eşdeğeri ( \047) ile değiştirin
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 6kullanımı daha basit ve daha hesaplamalı olarak verimlipwgen -s 6 1veya daha iyi olur, ancakpwgen -s 6 $(wc -l myfile)ihtiyacınız olan tüm rastgele dizeleri tek bir çekimde verir.