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