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"