AWK Ergebins in Datei schreiben

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo,
    mittels folgendem Code, den ich direkt im Terminal des Pi's eingebe, lasse ich mir bestimmte Teile des GPGGA GPS Protokolls ausgeben.

    Code
    sudo awk -F, '{ if ( $1=="$GPGGA" ) { print $3,$4,$5,$6  } }' /dev/ttyAMA0

    Ergebnis auf dem Bildschirm:

    51xx.xxxx N 007x.xxxx E
    51xx.xxxx N 007x.xxxx E
    51xx.xxxx N 007x.xxxx E
    51xx.xxxx N 007x.xxxx E
    51xx.xxxx N 007x.xxxx E
    usw.
    Bis hierher alles prima.


    Nun benötige ich diese Ergebnisse aber in einer .txt Datei.

    der Code:

    Code
    sudo awk -F, '{ if ( $1=="$GPGGA" ) { print $3,$4,$5,$6  > "/home/pi/gpgga.txt } }' /dev/ttyAMA0

    funktioniert leider nicht. Es wird lediglich eine lehre .txt Datei erstellt.

    Was kann ich, als Amateur, machen um die Werte in die Datei zu schreiben?

    Ich Danke für die Hilfe.

  • Code
    sudo awk -F, '{ if ( $1=="$GPGGA" ) { print $3,$4,$5,$6  > "/home/pi/gpgga.txt } }' /dev/ttyAMA0


    funktioniert leider nicht.


    Du musst die Ausgabe des ganzen awk Befehls in eine Textdatei redirecten. Probiere mal

    Code
    sudo awk -F, '{ if ( $1=="$GPGGA" ) { print $3,$4,$5,$6  } }' /dev/ttyAMA0 > /home/pi/gpgga.txt


    Vielleicht ist auch das Pipen in tee eine andere Option für Dich. Dann siehst Du dia Ausgabe auf dem Schirm und es wird in eine Datein geschrieben.

  • @ framp
    dein Version sollte auf jedenfall funktionieren. Anzumerken wäre für den TO noch:

    wenn du mit > umleitest wird die Datei jedesmal überschrieben. Wenn du mit >> umleitest wird jeweils hinten angefügt.

    Und bei Gelegenheit probier meine und framps Versionen mal aus. Ich denke nämlich das beides funktionieren würde. ;)

  • drops

    Zitat
    Code
    test=$(sudo awk -F, '{ if ( $1=="$GPGGA" ) { print $3,$4,$5,$6  } }' /dev/ttyAMA0)
    echo $test >> test.txt

    hat folgendes Ergebnis gebracht:
    51xx.xxxx N 007x.xxxx E 51xx.xxxx N 0074x.xxxx E 51xx.xxxx N 0074x.xxxx E

    Es hat auch nur einmal funktioniert.

    framp

    Zitat
    Code
    sudo awk -F, '{ if ( $1=="$GPGGA" ) { print $3,$4,$5,$6  } }' /dev/ttyAMA0 > /home/pi/gpgga.txt

    Es wird wieder nur eine lehre .txt Datei erstellt.


    Gibt es sonst noch Möglichkeiten die GPGGA GPS Daten in eine Datei zu schreiben?
    Bin für alles offen.
    Ich habe auch schon folgendes probiert:

    Code
    sudo cat /dev/ttyAMA0 | grep '$GPGGA' > /home/pi/gpgga.txt

    Hierbei wird auch wieder die lehre .txt Datei erstellt. Ohne > /homepi/gpgga.txt bekomme ich das GPGGA Protokoll auf dem Bildschirm ausgegeben.

    Tell
    Deine Antwort klappt garnicht.
    Fehlerausgabe:
    awk: cannot open garmin.log (No such file or directory)

    Einmal editiert, zuletzt von Grabbbo (28. Dezember 2013 um 20:51)

  • Tell
    also ich habe grade folgendes eingegeben:
    sudo awk -F, '$1==$GPGGA" { print $3,$4,$5;$6 > "/home/pi/gpgga.txt" }' /dev/ttyAMA0


    Das hatte auch wieder nur eine lehre Datei zur Folge.
    Ich habe sogar die Bildschirmausgabe nochmal überprüft. Es kommen definitiv Daten.

  • Da fehlt wieder ein Quote: es muss "$GPGGA" heissen.

    Ich hab noch ein sudo vorne hingesetzt und es lief sauber.

    Ein GPS werde ich nicht extra hinbauen um das Script zu testen ...

    - - - - - -

    Noch was: Beim naechsten Versuch warten bis das Kommando 4kB geschrieben hat.
    Linux schreibt erst mal den Buffer voll bis etwas ins Log kommt.

    Vielleicht funktionieren fast alle Varianten, wenn man genug Geduld hat :thumbs1:

  • Tell

    Code
    sudo awk -F, '$1=="GPGGA" { print $3,$4,$5,$6 > "/home/pi/gpgga.txt }' /dev/ttyAMA0

    das gibt die GPGGA GPS Daten wieder auf dem Bildschirm aus und erstellt keine Datei. Noch nicht mal eine lehre.

    Wie gesagt, ich bin ein Anfänger und lasse mir gerne etwas beibringen.

    sorry "$GPGGA" habe falsch abgeschrieben.

    Code
    sudo awk -F, '$1=="$GPGGA" { print $3,$4,$5,$6 > "/home/pi/gpgga.txt }' /dev/ttyAMA0

    habe ich natürlich auch probiert.

    Einmal editiert, zuletzt von Grabbbo (28. Dezember 2013 um 21:55)

  • Und wieder fehlt ein Quote, diesmal hinter dem Filenamen !
    Das $ ist auch verloren gegangen.

    - - - -

    Vermutlich liegt das Problem am Buffering. Ich hab ein paar Versuche
    gemacht und zumindest grep puffert den Output.

    Man kann bei grep aber Line-Buffering verlangen, dann wartet es nicht bis der Buffer voll ist.

    Das da koennte also funktionieren (GENAU ABSCHREIBEN):

    sudo grep --line-buffered '$GPGGA' /dev/ttyAMA0 > gpgga.txt

  • Das klappt.
    Die Datei wird erstellt und mit Daten gefüllt. Nich so elegant wie die Ausgabe mit AWK aber es werden Daten geschrieben.

    Nächstes Problem aufgetaucht.
    Der Prozess der durch: sudo grep --line-buffered '$GPGGA' /dev/ttyAMA0 > gpgga.txt ausgelöst wird, bricht nach unbestimmter Zeit ab. Mal werden 50 Zeilen in die Datei geschrieben und mal sind es 87.

    Woher kommt das jetzt wieder?

  • Mach eine Schleife und append jede Zeile in deine Textdatei

    Ausserdem solltest du die Serielle Schnittstelle /dev/ttyAMA0 vorher noch richtig einstellen (baudrate, parity, databits, stopbits)


  • Mach eine Schleife und append jede Zeile in deine Textdatei

    Ausserdem solltest du die Serielle Schnittstelle /dev/ttyAMA0 vorher noch richtig einstellen (baudrate, parity, databits, stopbits)

    Zitat


    ... Was kann ich, als Amateur, machen um die Werte in die Datei zu schreiben?


    :s

  • > Der Prozess der durch: sudo grep --line-buffered '$GPGGA' /dev/ttyAMA0 > gpgga.txt ausgelöst wird, bricht nach unbestimmter Zeit ab
    Gibt's irgendwelche Fehlermeldungen ?

    Das Programm in logwriter.cpp speichern.
    Uebersetzen mit g++ -o logwriter logwriter.cpp
    Ausfuehren mit sudo ./logwriter < /dev/ttyAMA0 > gpgga.txt

    Wenn grep abbricht, ist allerdings zu befuerchten, dass dieses Programm das gleiche Problem bekommt.


    hula hula bamba

    Einmal editiert, zuletzt von Tell (29. Dezember 2013 um 00:22)


  • ... Kruzifix zeig ...

    Umleiten in eine Datei is dann auch einfach:

    Code
    script.pl > datei.txt

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!