2 votes

terminal script pour rechercher dans un fichier CSV

2 parties pour ça, je ne vois pas où je me trompe.

La première partie fonctionne - j'obtiens mon BSSID par la commande de l'aéroport :

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

puis (c'est là que j'obtiens EOF ou des erreurs de syntaxe) : passer cette valeur à awk, qui va chercher cette chaîne dans un fichier (APtable.csv), et me donner la valeur adjacente à celle-ci :

awk -v theBSSID=$myBSSID '$1 == theBSSID {print $2}' '/Users/russell/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.

3voto

user3439894 Points 52496

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

343-- J'ai remarqué cela aussi, (l'abandon des 0)... bizarre. Pouvons-nous être les premiers à le remarquer ? Mais l'important, c'est que vous ayez réussi à faire fonctionner le code (ensemble) ! Merci.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X