जाग के साथ बैश लूप की दक्षता बढ़ाएं


1

मुझे एक फ़ाइल के दूसरे कॉलम से निकाले गए टेक्स्ट का उपयोग करके एक काफी बड़ी टेक्स्ट फाइल (> 300,000 लाइनें) लिखनी है, फिर प्रत्येक लाइन पर टेक्स्ट को प्रीपेडिंग और एपेंड करना है और अंत में इसे एक नई फाइल में लिखना है।

लूप करते समय मेरे पास निम्नलिखित है और यह ठीक काम कर रहा है। लेकिन यह धीमा है, प्रति मिनट कई मिनट लग रहे हैं। मुझे संदेह है कि एक बेहतर जाग नुस्खा / विधि है जो बहुत तेज होगी। क्या कोई तेज तरीका सुझा सकता है।

स्रोत उदाहरण

useless9   important1   more useless stuff
useless8   important2   more useless stuff
useless7   important3   more useless stuff
useless6   important4   more useless stuff

स्रोत फ़ाइल और आउटपुट अंतिम परिणाम फ़ाइल से पाठ निकालें।

while read line; do

  mytext=`echo $line | awk -v RS='\r\n' '{print $2}'`

  echo "$PrePattern $mytext $PostPattern" >> $OUTFILE

done < $SOURCEFILE

outfile

PrePattern text important1 PostPattern text
PrePattern text important2 PostPattern text
PrePattern text important3 PostPattern text
...

1
स्रोत फ़ाइल से कुछ नमूना लाइनें दिखाएं। यही कारण है कि पूरे पाश शायद के रूप में व्यक्त किया जा सकता हैawk -v pre="$PrePattern" -v post="$PostPattern" '{print pre, $2, post}' "$SOURCEFILE"
ग्लेन जैकमैन

बहुत बहुत धन्यवाद, ग्लेन जैकमैन! जैसा कि मुझे संदेह था कि एक प्रदर्शन लाभ होना था। आपके समाधान ने ~ 15 सेकंड की प्रक्रिया को ~ 3 सेकंड में बदल दिया
धीमी प्रहार

उस लाभ में से बहुत से 300,000 awk प्रक्रियाओं को शुरू करने की जरूरत नहीं है, जब सिर्फ 1 करेंगे
ग्लेन जैकमैन

जवाबों:


1

आपको अधिक जागृत अध्ययन करने की आवश्यकता है।

awk '{print "prepattern mytext "$2" postpattern";}' <$sourcefile >$outfile

2
क्या आप यह समझाकर उस शिक्षा प्रक्रिया को शुरू कर सकते हैं? धन्यवाद।
फिक्सर 1234

@ fixer1234 इसके बजाय, awk मैन पेज पढ़ें और फिर मैंने जो उदाहरण पोस्ट किया है उसे देखें। उसके बाद यदि आपके कुछ विशिष्ट प्रश्न हैं, तो मैं आपको उन बिंदुओं को समझने में मदद करूँगा।
बिंग बैंग
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.