Beim Laufen sehen iw help
Sie eine Warnung:
Sie nicht dieses Tool screenscrape, wir sind nicht der Ansicht sein Ausgang stabil.
Im Folgenden finden Sie zwei Abschnitte : Erstens eine Lösung zur Vermeidung Ihres Problems iw
und zweitens eine Antwort auf Ihre Frage. Beide arbeiten sowohl mit traditionell awk
als auch (Standardeinstellung) GNU Awk
.
Lösung für Ihr Problem
Ich würde iwconfig
anstelle von verwenden iw
:
while sleep 1; do
iwconfig wlan0 | awk -F'[ :=]+' '/Freq/{gsub("\\.","");f=$5}/Signal/{s=$7}END{print s","f}'
done >>log.csv
Ausgabe
$ iwconfig wlan0 | awk -F'[ :=]+' '/Freq/{gsub("\\.","");f=$5}/Signal/{s=$7}END{print s","f}'
-44,2412
Anmerkungen
Ich war verwirrt, ob Sie die Werte durch ,
oder eher durch eine Registerkarte (was wäre \t
) getrennt haben möchten . Ich habe hier ,
ohne und umliegende Leerzeichen gewählt. Wenn es nicht das ist, was Sie wollten, ändern Sie es einfach s","f
entsprechend, s
ist das Signal
und f
der Frequency
Wert dort.
Ich habe auch die Umleitung verschoben. Auf diese Weise muss die Datei nicht bei jedem Lauf geöffnet werden, sondern nur einmal.
Erklärungen des awk
Teils
-F'[ :=]+'
- setzt ein anderes Feldtrennzeichen, hier auf eines oder mehrere ( +
) der drei Zeichen in eckigen Klammern
/Freq/{gsub("\\.","");f=$5}
- Ersetzen Sie in den Zeilen mit „Freq“ jeden Punkt durch nichts (da die Frequenz in der iwconfig
Ausgabe einen Punkt als Tausendertrennzeichen verwendet) und speichern Sie den Inhalt der fünften Spalte in einer Variablenf
/Signal/{s=$7}
- Speichern Sie in den Zeilen mit „Signal“ den Inhalt der siebten Spalte in einer Variablen s
END{print s","f}
- nach der Verarbeitung der Eingabe print
die Variablen s
und f
mit einem wörtlichen Komma dazwischen
Beantworten Sie Ihre Frage
while sleep 1; do
iw dev wlan0 link | awk '/freq/{f=$2};/signal/{s=$2}END{print s","f}'
done >>log.csv
Ausgabe
$ iw dev wlan0 link | awk '/freq/{f=$2};/signal/{s=$2}END{print s","f}'
-43,2412
Erklärungen des awk
Teils
/freq/{f=$2}
- freq
Speichern Sie in den Zeilen mit die zweite Spalte (durch Leerzeichen getrennt) in der Variablenf
/signal/{s=$2}
- signal
Speichern Sie in den Zeilen mit die zweite Spalte in der Variablens
END{print s","f}
- nach der Verarbeitung der Eingabe print
die Variablen s
und f
mit einem wörtlichen Komma dazwischen