CSV फ़ाइल खोजने के लिए टर्मिनल स्क्रिप्ट


2

इसके 2 भाग, यह नहीं देख सकते कि मैं कहाँ गलत हूँ

पहला भाग काम करता है - एयरपोर्ट कमांड के माध्यम से मेरा BSSID प्राप्त करें:

myBSSID="/System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport -I | grep BSSID | awk '{print $2}'"

तब (यह वह जगह है जहां मुझे EOF या सिंटैक्स त्रुटियां मिलती हैं): उस मान को जागृत करने के लिए पास करें, जो उस स्ट्रिंग के लिए एक फ़ाइल (APtable.csv) खोजेगा, और मुझे इसके लिए आसन्न मान देगा:

awk -v theBSSID=$myBSSID '$1 == theBSSID {print $2}' '/Users/russell/Desktop/APtable.csv'

अंत में आप क्या हासिल करना चाहते हैं, इस पर निर्भर करते हुए, आप अजगर में भी ऐसा कर सकते हैं; यह जवाब एक प्रारंभिक बिंदु प्रदान करता है, और आप आसानी से (जैसे) रिटर्न मानों का उपयोग कर सकते हैं। pandas अजगर में मॉड्यूल।
Asmus

1
मैंने अपना उत्तर अपडेट कर दिया है, इसलिए आप इसकी समीक्षा करना चाहते हैं।
user3439894

: (बहुत जल्द बोला।
nuthindoin

इसलिए, मर्फी का नियम, पहले बीएसएसआईडी I से एक अग्रणी 0 जुड़ा है, इसलिए मूल स्क्रिप्ट कुछ भी वापस नहीं करती है। लेकिन आपके ऐडेड स्क्रिप्ट को चलाने से मुझे कुछ मिलता है, लेकिन मुझे यकीन नहीं है कि क्या: awk: newline in string 94:b4:0f:ed:fd:b1 40... at source line 1
nuthindoin

ऐसा लगता है जैसे awk पाता है कि फाइल के कॉलम 1 में इसकी तलाश क्या है, लेकिन फिर इसके आगे कॉलम 2 प्रिंट नहीं करता है।
nuthindoin

जवाबों:


3

आपको पाइप करने की आवश्यकता नहीं है 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"

343-- मैंने उस पर भी ध्यान दिया है, (0 के छोड़ने पर) ... अजीब। क्या हम यह नोटिस करने वाले पहले व्यक्ति हो सकते हैं? लेकिन महत्वपूर्ण बात यह है, आपको काम करने के लिए कोड मिला (एक साथ)! धन्यवाद।
nuthindoin
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.