AWK Ergebins in Datei schreiben
-
Grabbbo -
December 28, 2013 at 7:24 PM -
Thread is Resolved
-
-
AWK Ergebins in Datei schreiben? Schau mal ob du hier fündig wirst!
-
@meigrafd
Ich habe jetzt libdevice-serialport-perl und libproc-daemon-perl installiert.
Dann habe ich dein Sript in die Datei script.pl eingefügt und mit nano script.pl > datei.txt umgewandelt.QuoteDisplay More
[?1049h[1;62r(B[m[4l[?7h[?12l[?25h[?1h=[?1h=[?1h=[39;49m[39;49m(B[m[H[2J(B[0;7m GNU nano 2.2.6 Datei: script.pl [3;1H(B[0m[32m#!/usr/bin/perl -w
[4d# Reads data from serial port
[6d# Run apt-get install libdevice-serialport-perl
[7d# if you get "Can't locate device/SerialPort.pm in @INC (@INC includes ..."
[8d# use lib '/usr/lib/perl5/Device'
[10d#To install Proc:Daemon
[11d#perl -MCPAN -e 'install Proc::Daemon' OR sudo apt-get install libproc-daemon-perl
[13d#### CONFIG - START
[15d# set UART baudrate
[16d[35mmy[39m(B[m [36m$baudrate [39m(B[m= 9600;
[18d[32m# set Serial Port
[19d[35mmy[39m(B[m [36m$PORT [39m(B[m= [33m"/dev/ttyAMA0"[39m(B[m;
[21d[32m#### CONFIG - END
[23d# Declare the subroutines
[24d[35msub[39m(B[m trim([36m$)[39m(B[m;
[26dBEGIN {[27;5H[31mpush[39m(B[m [36m@INC,[33m"/usr/lib/perl5/"[39m(B[m;
[28d}[30d[37muse strict;
[31duse Device::SerialPort qw( :PARAM :STAT 0.07 );
[32duse Time::localtime;
[33duse Proc::Daemon;
[35d[35mmy[39m(B[m [36m$ob [39m(B[m= Device::SerialPort->new([36m$PORT)[39m(B[m;
[36d[36m$ob-[39m(B[m>baudrate([36m$baudrate)[39m(B[m;
[37d[36m$ob-[39m(B[m>parity([33m"none"[39m(B[m);
[38d[36m$ob-[39m(B[m>databits(8);
[39d[36m$ob-[39m(B[m>stopbits(1);
[40d[32m#$ob->handshake("xoff");
[41d[36m$ob-[39m(B[m>write_settings;
[43d[31mopen[39m(B[m(SERIAL, [33m"+>$PORT"[39m(B[m);
[45d[35mmy[39m(B[m [36m$continue [39m(B[m= 1;
[46d[36m$SIG{[39m(B[mTERM} = [35msub[39m(B[m { [36m$continue [39m(B[m= 0 };
[48d[35mwhile[39m(B[m ([36m$continue)[39m(B[m {[49;5H[35mmy[39m(B[m [36m$line [39m(B[m= trim(<SERIAL>;);[50;5H[31mprint[39m(B[m [36m$line;[39m(B[m [31mprint[39m(B[m [33m"\r\n"[39m(B[m;
[51d}[53d[32m# Perl trim function to remove whitespace from the start and end of the string
[54d[35msub[39m(B[m trim([36m$)[39m(B[m {[55;5H[35mmy[39m(B[m [36m$string [39m(B[m= [31mshift[39m(B[m;[56;5H[36m$string [39m(B[m=~ [37ms/^\s+//[39m(B[m;[57;5H[36m$string [39m(B[m=~ [37ms/\s+$//[39m(B[m;[58;5H[31mreturn[39m(B[m [36m$string;
[59d[39m(B[m}[60;48H(B[0;7m[ 58 Zeilen gelesen ]
[61d^G(B[m Hilfe[61;20H(B[0;7m^O(B[m Speichern[39G(B[0;7m^R(B[m Datei öffnen (B[0;7m^Y(B[m Seite zurück (B[0;7m^K(B[m Ausschneiden (B[0;7m^C(B[m Cursor
[62d(B[0;7m^X(B[m Beenden[62;20H(B[0;7m^J(B[m Ausrichten[39G(B[0;7m^W(B[m Wo ist[62;58H(B[0;7m^V(B[m Seite vor[77G(B[0;7m^U(B[m Ausschn. rückgän(B[0;7m^T(B[m Rechtschr.
[3d[60;29H(B[0;7m[ Zeile 1/59 (1%), Spalte 1/19 (5%), Zeichen 0/1157 (0%) ]
[3d(B[m[2;59r[2;1HM[1;62r[1;105H(B[0;7mVerändert
[4d(B[m[2;59r[2;1HM[1;62r[5;1H[2;59r[2;1HM[1;62r[6;1H[60;37H(B[0;7m4/62 (6[60;74H3/1160
[6d(B[mDas wird in die datei.txt Datei ausgegeben.
Nach dem Umwandeln reagiert der Pi nicht mehr. Musste ihn rebooten. -
Ähm irgendwas hast du arg missverstanden...

Du solltest nix umwandeln - der letzte Codeblock ist eine umLeitung, keine umWandlung
Es handelt sich um ein Perl script (script.pl) welches man ausführt und dessen Ausgabe kann man bei Bedarf umleiten, in deinem Fall in eine Textdatei...
Also nochmal: Den Inhalt aus dem ersten Codeblock copy&pastest du in nano (nano script.pl), speicherst und beendest nano und versiehst das Script anschliesend mit ausführrechten (chmod +x script.pl). Anschliesend führst du es aus: ./script.pl
Wenn das wie gewünscht funktioniert kannst du die Ausgabe des Scripts umLeiten: ./script.pl > datei.txt -
Versuche malCodesudo stdbuf -o0 awk -F, '{ if ( $1=="$GPGGA" ) { print $3,$4,$5,$6 } }' /dev/ttyAMA0 > /home/pi/gpgga.txt. stdbuf schaltet das Buffering aus.
Hier sind noch ein paar weitere Vorschläge wie man das Bufering bei awk ausschaltet (tail -f oder unbuffer benutzen von expect oder auch eine alternative awk Aufrufsyntax zu benutzen).
-
Ich hab's nochmals probiert:
-> Es liegt am Buffering. Zuerst bleibt das Log eine Weile auf 0 Bytes und dann springt es auf 4096 Bytes
framp: stdbuf -i0 -o0 bewirkt in diesem Fall gar nichts
thbeckmann: den Output durch tee zu pipen hilft tatsaechlich
-
Hallo,
erst mal vielen vielen Dank an alle die sich dieser Aufgabe angenommen haben.Ich konnte durch eure Antworten sehr viel lernen, musste aber feststellen das ich viel mehr lernen muss.
@Meingrafd
Dein Script hat funktioniert. Leider wird nicht nach GPGGA gefiltert. Es werden alle GPS Protokolle in die Datei geschrieben.Quote
sudo awk -F, '{ if ( $1=="$GPGGA" ) { print $3,$4,$5,$6 } }' /dev/ttyAMA0 | tee /home/pi/gpgga.txt
hat leider nicht funktioniert. Die Datei blieb lehr.Ich muss das nochmal durchdenken. Die kontinuierliche Ausgabe der GPS Daten in eine Datei ist doch zu viel. Die regelmäßige Abfrage und Protokollierung (Abfrage nach Zeit X, in Datei schreiben) macht mehr Sinn.
thbeckmann
hat doch geklappt. Sollte mal geduldiger werden
-
Hatte ich fast erwartet dass es mit tee auch nicht funktioniert (Siehe diesen Link). Leider kann ich nix testen da ich die HW nicht habe.
Grabbbo: Hast Du Dir mal die von mir verlinkte Seite angesehen und die Moeglichkeiten durchgetestet? Es liegt definitiv am Buffering was man auschalten muss. Die Frage ist nur wie sage ich es meiner kleinen Pi :s -
Danke framp,
den Link habe ich mir angeschaut und auch ausprobiert. Es liegt wirklich am Buffering. Es werden erst ab 4096B Daten in die Datei geschrieben. -
Wie sagt's der Ostfriese: "Und was ist mit Tee?" -
da das stdout weiter versorgen muss, hatte ich erwartet, dass es das buffering der shell unterdrückt... -
Jupp, hatte ich auch gedacht. Deshalb hatte ich ja auch oben vorgeschlagen es mal mit angloostfriesichem Tee zu probieren

-
@Meingrafd
Dein Script hat funktioniert. Leider wird nicht nach GPGGA gefiltert. Es werden alle GPS Protokolle in die Datei geschrieben.Naja das Script funktioniert auf jedenfall da ich das selber seit über 2 Wochen 24/7 im Einsatz habe

Entweder man baut nativ in Perl ein das es nur Zeilen ausgeben soll die GPGGA enthalten, oder man regelt das beim ausführen:
-
Wie schon gesagt,
vielen Dank an alle.
Ich glaube das Thema AWK Ergebins in Datei schreiben hat sich erledigt. Werde es mal abschließen.Mein Gedanke geht jetzt ehr in die Richtung, die GPGGA GPS Daten einmal die Minute abzufragen und dann zu protokollieren. Wie ich das anstelle, weis ich noch nicht aber hier im Forum gibt es ja Gott sei Dank kompetente Auskunft. Findet man nicht in jedem Forum.
Vielen Dank.
Grabbbo -
Participate now!
Don’t have an account yet? Register yourself now and be a part of our community!