script di terminale per cercare file CSV

2

2 parti per questo, non riesco a vedere dove sto andando male

La prima parte funziona: ottieni il mio BSSID tramite il comando dell'aeroporto:

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

allora (qui è dove ottengo gli errori EOF o di sintassi): passa quel valore a awk, che cercherà un file (APtable.csv) per quella stringa e mi darà il valore adiacente ad esso:

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

1 risposta

3

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"
    
risposta data 26.01.2017 - 03:17
fonte

Leggi altre domande sui tag