คุณไม่จำเป็นต้องไปป์ไลน์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โมดูลในหลาม