एक पैटर्न और प्रिंट के साथ दो लाइनों के बीच सभी पूर्णांकों को कैसे जोड़ा जाए


0

मेरे पास एक इनपुट फ़ाइल है (sample.txt)

Sat 02/28/2015__19:32:37.63 
   262,404 K
   100,964 K
   112,052 K
   124,628 K
Sat 02/28/2015__19:37:38.41 
   262,408 K
   100,964 K
   112,056 K
Sun 02/29/2015__16:32:40.11 
   262,443 K
   100,964 K
   112,052 K
   124,628 K
Sun 02/29/2015__16:32:49.20 
   262,408 K
   100,964 K
   112,022 K

मैं पैटर्न सत और सूर्य के साथ रेखा को प्रिंट करना चाहता हूं और फिर (दो पैटर्न के बीच सभी संख्याओं का योग)। मैं नीचे जैसा कुछ उत्पादन करना चाहता हूं

Sat 02/28/2015__19:32:37.63 
600048 
Sat 02/28/2015__19:37:38.41
475463
Sun 02/29/2015__16:32:40.11
600087
Sun 02/29/2015__16:32:49.20 
475394

जवाबों:


0
$ awk -F, 'NR>1 && /^[SMTWF]/{print sum;f=0} /^S/{print;sum=0;f=1;next} {sum+=$1$2} END{if (f)print sum}' file
Sat 02/28/2015__19:32:37.63 
600048
Sat 02/28/2015__19:37:38.41 
475428
Sun 02/29/2015__16:32:40.11 
600087
Sun 02/29/2015__16:32:49.20 
475394

यह काम किस प्रकार करता है

  • -F,

    क्षेत्र विभाजक के लिए अल्पविराम का उपयोग करें।

  • NR>1 && /^[SMTWF]/{print sum;f=0}

    पहले के बाद की किसी भी पंक्ति के लिए, यदि यह सप्ताह के किसी दिन के पहले अक्षर से शुरू होता है, तो राशि को प्रिंट करें।

  • /^S/{print;sum=0;f=1;next}

    यदि वर्तमान रेखा S (शनिवार या रविवार के लिए) अक्षर से शुरू होती है, तो रेखा को प्रिंट करें, योग को 0 पर प्रारंभ करें, ध्वज सेट करें f 1 से, और सीधे पर जाएं next लाइन।

  • sum+=$1$2

    अन्य सभी लाइनों के लिए, संख्या को इसमें जोड़ें sumawk अंकों को अलग करने वाले अल्पविराम को समझ नहीं पाएंगे। चूंकि अल्पविराम का उपयोग क्षेत्र विभाजक के रूप में किया जाता था, तब $1$2 अल्पविराम के बिना वह संख्या है जो एक ऐसा रूप है जो awk समझेगा।

  • END{if (f)print sum}

    यदि हम वर्तमान में शनिवार या रविवार समूह में हैं तो अंतिम शेष राशि प्रिंट करें। इसे पूरा करने के लिए, हम ध्वज का उपयोग करते हैं f। यदि अंतिम ग्रुपिंग सोमवार से शुक्रवार तक होती है, तो f == 0 और राशि प्रिंट नहीं होगी। यदि यह शनिवार या रविवार था, तो f == 1 और यह प्रिंट होगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.