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