क्या आपको यह स्पष्ट नहीं लगता है? आप बस एक बार यादृच्छिक स्ट्रिंग उत्पन्न कर रहे हैं और इसे 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)आपको एक शॉट में आपको बिल्कुल यादृच्छिक स्ट्रिंग्स की आवश्यकता होगी।