Vous n'avez pas besoin d'un tuyau pour grep
et ensuite à awk
dans la première ligne comme awk
peut faire ce qui est nécessaire par lui-même. De plus, la façon dont vous avez écrit la première ligne, il manque la balise $(...)
autour des commandes.
Dans la deuxième ligne, il manque le séparateur de champ dans le champ awk
qui, dans un .csv
est normalement une virgule. Donc j'ai ajouté ça à la awk
commandement.
Utilisez les deux lignes suivantes :
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"
J'ai remarqué que la sortie du airport
n'a pas signalé la BSSID
correctement dans la mesure où il a omis quelques zéros.
Si c'est le cas sur votre système et que l'option .cvs
a des informations correctes, essayez alors ce qui suit :
myBSSID="$(system_profiler SPAirPortDataType | awk '/BSSID/{print $2}')"
awk -F ',' -v theBSSID="$myBSSID" '$1 == theBSSID {print $2}' "$HOME/Desktop/APtable.csv"
Notez que system_profiler SPAirPortDataType
n'est pas aussi rapide que l'utilisation de airport
mais si la sortie de airport
fait tomber certains zéros, il vous faudra une alternative si le fichier BSSID
dans les .cvs
ont les 12 caractères, sans compter les deux points, ce qui devrait être le cas.
Le texte suivant pourrait être utilisé pour incorporer les deux méthodes dans un programme de gestion des déchets. bash
script de manière à n'utiliser la deuxième méthode que si la longueur de myBSSID
est inférieure à 17 caractères, car 17 est la longueur correcte.
#!/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"
0 votes
En fonction de ce que vous souhaitez réaliser au final, vous pouvez également envisager de le faire en Python ; cette réponse constitue un point de départ, et vous pouvez facilement stocker (accéder) aux valeurs de retour en utilisant, par exemple, la fonction
pandas
en Python.1 votes
J'ai mis à jour ma réponse, vous pouvez donc la consulter.
0 votes
: ( J'ai parlé trop vite.
0 votes
Donc, loi de Murphy, le premier BSSID auquel je me connecte a un 0 en tête, donc le script original ne renvoie rien. Mais l'exécution de votre script ajouté me donne quelque chose, mais je ne suis pas tout à fait sûr de ce que c'est :
awk: newline in string 94:b4:0f:ed:fd:b1 40... at source line 1
0 votes
Il semble que awk trouve ce qu'il cherche dans la colonne 1 du fichier, mais n'imprime pas la colonne 2 à côté.
0 votes
Après une semaine de réflexion sans résultat, je me demande si quelqu'un a une suggestion sur la façon d'obtenir un journal des événements du script. Dans la deuxième partie du script, lorsqu'il recherche la valeur adjacente à la chaîne BSSID, il semble ne pas comprendre que je veux que cette valeur (la valeur adjacente) soit renvoyée.