No es necesario canalizar a grep
y luego a awk
en la primera línea, ya que awk
puede hacer lo que sea necesario por sí mismo. También en la forma en que se escribió la primera línea, falta el $(...)
en los comandos.
En la segunda línea le falta el separador de campo en el comando awk
, que en un archivo .csv
normalmente es una coma. Así que agregué eso al comando awk
.
Use las siguientes dos líneas:
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"
Noté que la salida del comando airport
no reportó el BSSID
correctamente, ya que si se omiten algunos ceros.
Si ese es el caso de su sistema y el archivo .cvs
tiene la información adecuada, intente lo siguiente:
myBSSID="$(system_profiler SPAirPortDataType | awk '/BSSID/{print $2}')"
awk -F ',' -v theBSSID="$myBSSID" '$1 == theBSSID {print $2}' "$HOME/Desktop/APtable.csv"
Tenga en cuenta que system_profiler SPAirPortDataType
no es tan rápido como usar airport
pero si la salida de airport
está eliminando algunos de los ceros, entonces necesitará una alternativa si el BSSID
está en el% El archivo .cvs
tiene los 12 caracteres, sin contar los dos puntos, lo que debería.
Lo siguiente podría usarse para incorporar ambos métodos en un script bash
para usar solo el segundo método si la longitud de myBSSID
es menos de 17 caracteres, ya que 17 es el longitud correcta.
#!/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"