इस आधार पर मैं कमांड चला रहा हूं
< /dev/urandom hexdump -v -e '/1 "%u\n"' |
awk '{ split("0,2,4,5,7,9,11,12",a,",");
for (i = 0; i < 1; i+= 0.0001)
printf("%08X\n", 100*sin(1382*exp((a[$1 % 8]/12)*log(2))*i)) }' |
xxd -r -p |
sox -traw -r44100 -b16 -e unsigned-integer - -tcoreaudio
मुझे लगता है कि यह कमांड चलने के दौरान awk द्वारा उपयोग की जाने वाली मेमोरी लगातार बढ़ती है, उदाहरण के लिए 75MB कच्चे ऑडियो डेटा द्वारा 500MB से अधिक मेमोरी का उपभोग किया गया है। पाइपलाइन में अन्य सभी कमांड मेमोरी की निरंतर मात्रा बनाए रखते हैं।
इस मेमोरी का उपयोग करके awk क्या है और क्या कोई विकल्प है जो केवल निरंतर मात्रा में मेमोरी का उपयोग करके इच्छित स्ट्रीम प्रोसेसिंग करता है?
अजीब संस्करण के मामले में:
⑆ awk --version
awk version 20070501
यहां मैंने थॉमस डिके के उत्तर पर आधारित कमांड का परीक्षण किया है:
< /dev/urandom hexdump -v -e '/1 "%u\n"' |
awk 'BEGIN { split("0,2,4,5,7,9,11,12",a,",") }
{ for (i = 0; i < 1; i+= 0.0001)
printf("%08X\n", 100*sin(1382*exp((a[$1 % 8]/12)*log(2))*i)) }' |
xxd -r -p |
sox -traw -r44100 -b16 -e unsigned-integer - -tcoreaudio
Here's the command I tested...
लेकिन आप हमें उस परीक्षण का परिणाम बताना भूल गए - क्या इससे समस्या हल हुई या नहीं? ऐसा नहीं हो सकता है क्योंकि a[]
लूप में एक तत्व के हर संदर्भ में प्रविष्टियों का निर्माण होगा यदि वे मौजूद नहीं थे यदि ऐसा नहीं होता है - तो क्या यह मदद करता है यदि आप विभाजन से पहले या उपयोग करने के बाद स्पष्ट रूप से सरणी को हटा दें, जैसे awk '{ delete a; split("0,2,4,5,7,9,11,12",a,","); for (i = 0; i < 1; i+= 0.0001) printf("%08X\n", 100*sin(1382*exp((a[$1 % 8]/12)*log(2))*i)) }'
? उस कोड सेगमेंट के साथ आपको मूल स्थान में विभाजन () छोड़ने की आवश्यकता है, इसे BEGIN में न ले जाएं।