2016-06-26 52 views
2

Ich habe eine CSV-Datei Beispiel RecordCountTest.csv benannt, die wie folgt aussieht:Bash-Skript anhängen/einfügen Zeitstempel in CSV

Date   Time   Shift   Record 
26-06-2016 15:23:01  Shift2  000002 
23-06-2016 09:06:24  Shift1  000001 

Wenn ein GPIO-Pin verdrahtet Taste ein Bash-Skript-Befehl ausgeführt wird, gedrückt wird. Ich möchte ein einfaches AWK- oder Bash-Skript, das ich aufrufen kann, nachdem der Befehl ausgeführt wurde, das dokumentieren kann, dass es passiert ist und wann es verfolgt wird. Ich möchte dies tun, indem Sie eine Zeile an der Spitze (aber unter der Überschrift) mit dem aktuellen Datum (TT-MM-JJJJ), der aktuellen Zeit (HH: MM: SS) einfügen, die Verschiebung ist eine Variable, die durch die bestimmt wird Bash-Skript (und ich werde diese Frage in 90 Minuten posten, wenn ich es vorher nicht herausfinden kann), und dann den Datensatz um eins erhöhen und die Datei als RecordCountTest.CSV speichern. Ich würde SED bevorzugen, wenn das möglich ist, was ich gerade versuche zu lernen, und alle Vorschläge, die mir helfen könnten, die Syntax besser zu verstehen, aber alles akzeptieren wird, was in diesem Bash-Skript funktionieren kann, einschließlich AWK.

Antwort

2

awk zur Rettung!

$ gawk -v OFS="\t" -v s="${shift}" 'NR==2{print strftime("%d-%m-%Y"), 
               strftime("%H:%M:%S"), 
               s, 
               sprintf("%06d",$4+1)} 
             {$1=$1}1' file > temp && mv temp file 

wenn Ihr awk nicht strftime Funktion nicht unterstützt, können Sie bash

$ awk -v OFS="\t" -v s="${shift}" 
        -v d="$(date +"%d-%m-%Y"$'\t'"%H:%M:%S")" 
      'NR==2{print d, s, sprintf("%06d",$4+1)} 
       {$1=$1}1' file > temp && mv temp file 
+0

Ich habe zurückkehren nur geschrieben, zwei Fragen zu dieser Seite und Sie haben sie beide mit AWK Lösungen Karakfa beantwortet! Ich werde testen und ich denke, dass ich wahrscheinlich mehr Zeit damit verbringen sollte, AWK als SED zu lernen. Danke, für die schnelle Antwort. :) Bleib dran! In der letzten Zeile sollten die beiden Instanzen von 'Datei' beide durch die RecordCountTest.csv ersetzt werden, richtig? –

+0

alles mit Mathematik und mehr als Textersetzung "awk" ist überlegen. "Datei" ist die Eingabedatei, das Ergebnis wird in eine temporäre Datei geschrieben, die dann die ursprüngliche Eingabe überschreibt. Wenn gleichzeitige Aktualisierungen möglich sind, benötigen Sie möglicherweise eine Lösung mit Sperren oder Ähnlichem. – karakfa

+0

Ich legte es in ein Bash-Skript und es schrieb nichts die Datei. Die Datei enthält nur die bereits vorhandenen Daten. Das Skript sah so aus: #!/Bin/bash sudo awk -v OFS = "\ t" -vs = "$ {shift}" 'NR == 2 {druck strftzeit ("% d-% m- % Y "), strftime ("% H:% M:% S "), s, sprintf ("% 06d ", $ 4 + 1)} {$ 1 = $ 1} 1 '/ home/pi/RecordCountTest .csv $ –