script de terminal para buscar el archivo CSV

2

2 partes de esto, no puedo ver a dónde me voy mal

La primera parte funciona: obtenga mi BSSID a través del comando del aeropuerto:

myBSSID="/System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport -I | grep BSSID | awk '{print $2}'"

entonces (aquí es donde obtengo EOF o errores de sintaxis): pase ese valor a awk, que buscará un archivo (APtable.csv) para esa cadena y me dará el valor adyacente:

awk -v theBSSID=$myBSSID '$1 == theBSSID {print $2}' '/Users/russell/Desktop/APtable.csv'
    
pregunta nuthindoin 26.01.2017 - 02:41

1 respuesta

3

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"
    
respondido por el user3439894 26.01.2017 - 03:17

Lea otras preguntas en las etiquetas