Non è necessario passare a grep
e quindi a awk
nella prima riga come awk
può fare da solo ciò che è necessario. Anche nel modo in cui hai scritto la prima riga, manca il $(...)
attorno ai comandi.
Nella seconda riga manca il separatore di campo nel comando awk
, che in un file .csv
normalmente è una virgola. Così l'ho aggiunto al comando awk
.
Utilizza le seguenti due righe:
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"
Ho notato che l'output del comando airport
non riportava correttamente BSSID
, nel caso in cui mancasse qualche zero.
Se questo è il caso sul tuo sistema e il file .cvs
ha le informazioni corrette, prova quanto segue:
myBSSID="$(system_profiler SPAirPortDataType | awk '/BSSID/{print $2}')"
awk -F ',' -v theBSSID="$myBSSID" '$1 == theBSSID {print $2}' "$HOME/Desktop/APtable.csv"
Tieni presente che system_profiler SPAirPortDataType
non è veloce quanto airport
, ma se l'output di airport
sta eliminando alcuni zeri, allora avrai bisogno di un'alternativa se BSSID
è nella% il file.cvs
ha tutti e 12 i caratteri, senza contare i due punti, che dovrebbero.
È possibile utilizzare quanto segue per incorporare entrambi i metodi in uno script bash
in modo da utilizzare solo il secondo metodo se la lunghezza di myBSSID
è inferiore a 17 caratteri, poiché 17 è il lunghezza corretta.
#!/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"