आपको पाइप करने की आवश्यकता नहीं है grep और फिर करने के लिए awk के रूप में पहली पंक्ति में awk वह कर सकता है जो स्वयं की आवश्यकता है। इसके अलावा जिस तरह से आपके पास पहली पंक्ति लिखी है, वह गायब है $(...) आज्ञाओं के आसपास।
दूसरी पंक्ति में आप फ़ील्ड विभाजक को याद कर रहे हैं awk कमांड, जिसमें ए .csv फ़ाइल सामान्य रूप से एक अल्पविराम है। तो मैंने कहा कि करने के लिए awk आदेश।
निम्नलिखित दो पंक्तियों का उपयोग करें:
myBSSID="$(/System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport -I | awk '/BSSID/{print $2}')"
awk -F ',' -v theBSSID="$myBSSID" '$1 == theBSSID {print $2}' "$HOME/Desktop/APtable.csv"
मैं के उत्पादन पर ध्यान दिया airport कमांड ने रिपोर्ट नहीं की BSSID सही में अगर कुछ शून्य बाहर छोड़ दिया।
अगर आपके सिस्टम पर ऐसा है और .cvs फ़ाइल में उचित जानकारी है, तो निम्न प्रयास करें:
myBSSID="$(system_profiler SPAirPortDataType | awk '/BSSID/{print $2}')"
awk -F ',' -v theBSSID="$myBSSID" '$1 == theBSSID {print $2}' "$HOME/Desktop/APtable.csv"
ध्यान दें कि system_profiler SPAirPortDataType उपयोग करने में उतना तेज़ नहीं है airport लेकिन अगर का उत्पादन airport शून्य से कुछ छोड़ रहा है, तो आपको एक विकल्प की आवश्यकता होगी यदि BSSID में है .cvs फ़ाइल में सभी 12 वर्ण हैं, कॉलन की गिनती नहीं, जो उन्हें चाहिए।
निम्नलिखित में दोनों विधियों को शामिल करने के लिए इस्तेमाल किया जा सकता है bash लिपि के रूप में केवल दूसरी विधि का उपयोग करने के लिए अगर की लंबाई myBSSID कम है तो 17 अक्षर, 17 सही लंबाई है।
#!/bin/bash
myBSSID="$(/S*/L*/P*/A*/V*/A/R*/airport -I | awk '/BSSID/{print $2}')"
l="${#myBSSID}"
if [[ $l -lt 17 ]]; then
myBSSID="$(system_profiler SPAirPortDataType | awk '/BSSID/{print $2}')"
fi
awk -F ',' -v theBSSID="$myBSSID" '$1 == theBSSID {print $2}' "$HOME/Desktop/APtable.csv"
pandasअजगर में मॉड्यूल।