2 votos

terminal de la secuencia de comandos para la búsqueda de archivos CSV

2 partes de esta, no puedo ver donde voy mal

La 1ª parte de obras--obtener mi BSSID por el aeropuerto de comandos:

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

entonces (esto es, donde puedo conseguir EF o errores de sintaxis): pasar ese valor a awk, que buscará un archivo (APtable.csv) para que la cadena, y me dan el adyacentes valor:

awk -v theBSSID=$myBSSID '$1 == theBSSID {print $2}' '/Users/russell/Desktop/APtable.csv'

3voto

user3439894 Puntos 5883

Usted no necesita tubo a grep y, a continuación, a awk en la primera línea como awk puede hacer lo que sea necesario por sí mismo. También la forma de tener la primera línea escrita, lo que falta es la $(...) alrededor de los comandos.

En la segunda línea que se está perdiendo el separador de campo en la awk comando, que en un .csv archivo, normalmente es una coma. Por lo que añadió que a la awk comando.

El uso de las dos líneas siguientes:

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"

Me di cuenta de la salida de la airport comando no informe de la BSSID correctamente ya que si se deja fuera algunos ceros.

Si ese es el caso en el sistema y el .cvs archivo tiene información adecuada, a continuación, 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 el uso de airport , pero si la salida de airport está cayendo algunos de los ceros, entonces usted necesitará una alternativa si la BSSID's de la .cvs archivo tiene todos los 12 caracteres, sin contar los dos puntos que deberían.

El siguiente podría ser utilizado para incorporar ambos métodos en un bash script para sólo utilizar el segundo método si la longitud de myBSSID , es menor de 17 caracteres, como 17 es la 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"

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X