mikrocontroller.net

Forum: PC-Programmierung Dump mit grep/sed/awk auswerten?


Autor: Gerald K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

ich möchte mir gerne für RRD die Werte der Zeilen channel busy time, 
receive time und transmit time aus dem Block [in use] mit grep, sed 
und/oder awk extrahieren. Leider sind meine Kenntnisse mit diesem Tools 
für solche Vorhaben nicht ausreichend. Hat mir jemand einen Tipp oder 
einen Link auf ein ähnliches Skript welches ich dann für meine Zwecke 
umbauen kann?

Besten Dank schonmal :)
Survey data from wlan1
        frequency:                      2432 MHz [in use]
        noise:                          -95 dBm
        channel active time:            73621132 ms
        channel busy time:              14259516 ms
        channel receive time:           12026978 ms
        channel transmit time:          1249821 ms
Survey data from wlan1
        frequency:                      2437 MHz
        noise:                          -95 dBm
        channel active time:            59 ms
        channel busy time:              16 ms
        channel receive time:           14 ms
        channel transmit time:          1 ms
Survey data from wlan1
        frequency:                      2442 MHz
        noise:                          -95 dBm
        channel active time:            59 ms
        channel busy time:              18 ms
        channel receive time:           16 ms
        channel transmit time:          1 ms

Autor: Liz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was ist das endformat was benötigt wird.

Autor: Hannes Jaeger (pnuebergang)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Regel Nr. 1: Wenn man awk verwendet braucht man weder sed noch grep. 
Beides kann awk genauso gut.

Ohne es ausprobiert zu haben (und lange nicht mehr gemacht), das 
awk-Programm:
/channel busy time:/     { print $4 $5; next; } 
/channel receive time:/  { print $4 $5; next; } 
/channel transmit time:/ { print $4 $5; next; } 

: Bearbeitet durch User
Autor: Liz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Survey { active = $NF ; ok = 0; }
Index($0,"[in use]")  { ok++;}
! ok { next;}

Setze diesel Zeilen favor.

Autor: Liz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Being survey fehlen die slashes. Wie geht days dass die angezeigt 
werden?

Autor: guest (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Liz schrieb:
> Being survey fehlen die slashes. Wie geht days dass die angezeigt
> werden?

Da hat wohl irgendeine Rechtschreibkorrektur zugeschlagen :)

Aber zur Frage. Direkt über dem Eingabefeld dieses Forums gibt es 
Hinweise zur Formatierung. Dann klappts auch mit den Slashes.

Autor: Gerald K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Beispiel oben ist die Ausgabe von
$ iw reg wlan0 survey dump

Benötigt werden in einen Shell-Skript die 3 Werte busy, receive, 
transmit time um diese an rrdupdate zu übergeben. Je WLAN-Kanal wird ein 
Block ausgegeben, aber mich interessiert nur der, der in der Ausgabe mit 
[in use] gekennzeichnet ist.

Autor: Liz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
[code]
Survey { active = $NF ; ok = 0; }
Index($0,"[in use]") { ok++; found++;}
! ok { next;}

/channel busy time:/     { busy=$4; }
/channel receive time:/  { receive=$4; }
/channel transmit time:/ { transmit=$4; }

END { if ( found ) print active, busy, receive, transmit; }
[code]

Autor: Liz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
/Survey/ { active = $NF ; ok = 0; }
Index($0,"[in use]") { ok++; found++;}
! ok { next;}

/channel busy time:/     { busy=$4; } 
/channel receive time:/  { receive=$4; } 
/channel transmit time:/ { transmit=$4; } 

END { if ( found ) print active, busy, receive, transmit; }

Autor: Rene H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Häng doch mal eine Ausgabe Datei an. Dann kann man es vor dem Posten 
kurz testen.

Grüsse,
René

Autor: grepping my head (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn man davon ausgehen kann (bitte nachprüfen!), dass in der Ausgabe 
der fragliche [in use]-Block immer als erstes erscheint, könnte man 
auch einfach eine Kombination von grep und head benutzen:

... | grep -E 'channel (busy|receive|transmit) time:' | head -n 3


Eine Alternative, wenn man sich darauf nicht verlassen kann, wäre,
zunächst nach der Zeile mit dem [in use] zu suchen und dann die
5 darauf folgenden Zeilen heraus zu filtern:

... | grep -A5 '\[in use\]' | grep -E 'channel (busy|receive|transmit) time:'

Autor: Gerald K. (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die zahlreichen Hinweise! Einen Dump habe ich mal angehängt.
$ iw wlan1 survey dump | | grep -A5 '\[in use\]' | grep -E 'channel (busy|receive|transmit) time:'

ergibt schonmal eine Zwischenausgabe aus der ich die Zahlen bestimmt 
noch extrahiert bekomme.

Die AWK-Beispiele bekomme ich leider nicht zum laufen, glaub bin für AWK 
zu doof. Hab den Code von Liz in test.awk kopiert.
$ iw wlan1 survey dump | awk -f test.awk

Autor: Liz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann verwende noch dies
| tr '\n' ' '

Es ist ein Leerzeichen zwischen den zweiten  '
Es generiert dann nur eine Zeile

Und mit
l awk '{ print $4,$9,$14 ;}'
Werden dann die Zahlen extrahiert.
Nummern muessen eventuell angepasst werden.
Es ist die Nummer des Wortes, angefangen mit 1

Wegen awk , eventuell gibt ed Probleme mit utf und ASCII,
Passiert mir auch öfters beim kopieren von code aus Website.

Autor: Gerald K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
$ iw wlan1 survey dump | awk -f test.awk

ergibt
awk: test.awk:2: Call to undefined function

test.awk:
/Survey/ { active = $NF ; ok = 0; }
Index($0,"[in use]") { ok++; found++;}
! ok { next;}

/channel busy time:/     { busy=$4; }
/channel receive time:/  { receive=$4; }
/channel transmit time:/ { transmit=$4; }

END { if ( found ) print active, busy, receive, transmit; }

Gibt es eigentlich ein gutes Howto zu awk & co? Ich benutz das zu selten 
als dass ich da ansatzweise weiß was zu tun ist :-(

Autor: Liz (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Index muss kleingeschrieben sein.

Autor: Gerald K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Super, funktioniert!

Vielen, vielen Dank :-)

Ich schnapp mir jetzt ein awk-Handbuch und versuche das Skript zu 
verstehen

Autor: Liz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
/Survey/ { active = $NF ; ok = 0; }
Index($0,"[in use]") { ok++; found++;}
! ok { next;}

Sollte eigentlich so sein

/Survey/ { a = $NF ; ok = 0; }
Index($0,"[in use]") { ok++; found++; active=a;}
! ok { next;}

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.