คุณไม่คิดว่ามันชัดเจนหรือเปล่า? คุณเพียงแค่สร้างสตริงสุ่มหนึ่งครั้งและเก็บไว้ใน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กำลังก่อให้เกิดปัญหาให้แทนที่ด้วยค่าฐานแปด ( \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)จะให้สตริงสุ่มทั้งหมดที่คุณต้องการในนัดเดียว