AWK का उपयोग करके दूसरा कॉलम प्राप्त करें


9

मैं डेटा के दूसरे कॉलम को पाने के लिए awk कमांड प्राप्त नहीं कर सकता।

बैश कोड:

filter_data=$(awk "{if(/$filter:/) print $2}" < scanresults_temp.txt)

printf  "$filter_data \n"

$ फ़िल्टर चर या तो डाउनलोड या अपलोड का मूल्य है जो शेल स्क्रिप्ट में पास हो जाता है। तो awk उचित पंक्ति की खोज के लिए डाउनलोड या अपलोड शब्द का उपयोग करता है।

फ़ाइल सामग्री हैं:

Testing download speed................................................................................
Download: 51.13 Mbit/s
Testing upload speed................................................................................................
Upload: 57.38 Mbit/s

मैं सिर्फ नंबर पाने की कोशिश कर रहा हूं और कुछ नहीं, पूर्व 51.13और 57.38


2
यदि आप इसे अभी प्रिंट कर रहे हैं तो इसे चर में क्यों सहेजें? बस का उपयोग awk'sprintf
सर्गी Kolodyazhnyy

जवाबों:


13

आपको awk प्रोग्राम बॉडी के लिए सिंगल कोट्स का उपयोग करने की आवश्यकता है ताकि awk के वेरिएबल्स शेल द्वारा विस्तारित न हों। यहां बताया गया है कि आपको शेल चर को awk में कैसे पास करना चाहिए:

filter_data=$( awk -v re="$filter:" '$0 ~ re {print $2}' scanresults_temp.txt )

7

वैकल्पिक तरीका यह है कि शेल awkको कार्य असाइनमेंट (अस्थायी) के माध्यम से पर्यावरण में परिवर्तनशील बनाया जाए :

re=$filter  awk  '$0 ~ ENVIRON["re"] {print $2}'  input.txt

ध्यान दें कि शेल में असाइनमेंट करते समय वैरिएबल कोटिंग आवश्यक नहीं है

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