yungmagnum
Anmeldungsdatum: 13. Mai 2019
Beiträge: 11
|
Hallo Linux-Gemeinde,
ich möchte mir mit folgendem Befehl | curl wttr.in/Hamburg?0 | grep 'mm' | cut -f 15-21 | cut -c 1-4 > hh.txt
|
die Regenmenge ausgeben lassen, diese in eine txt-Datei schreiben und dahinter noch einen Zeitstempel mit Datum + Uhrzeit anhängen. cp wäre vermutlich der passende Befehl oder?
Über Hilfe und Vorschläge wäre ich sehr dankbar!
Glück auf!
|
ChickenLipsRfun2eat
Supporter
Anmeldungsdatum: 6. Dezember 2009
Beiträge: 12070
|
Hallo! Möchtest du (fortlaufend) das Datum in die Datei schreiben, oder möchtest du den Dateinamen mit Datum versehen? In beiden Fällen wäre date dein Freund: | date +"Monat %B, %A, der %e.%m.%Y (Uhrzeit:%T)"
|
|
yungmagnum
(Themenstarter)
Anmeldungsdatum: 13. Mai 2019
Beiträge: 11
|
Ich möchte das Ganze in ein Skript packen und dann via cronjob alle 5 Minuten die Informationen von der Seite abrufen lassen. Bei jedem „Zugriff“ soll die neue Millimeter-Zahl mit Datum und Uhrzeit in die txt-Datei geschrieben werden, unter die vorherige Millimeter-Zahl natürlich.
|
steamywindows
Anmeldungsdatum: 5. Mai 2018
Beiträge: Zähle...
|
Vielleicht so in der Art: | echo $(curl wttr.in/Hamburg?0 | awk '{ print $5 }' | tail -1) mm - $(date +'%d.%m.%Y') - $(date +'%H:%M')>> hh.txt
|
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12527
|
steamywindows schrieb: Vielleicht so in der Art: | echo $(curl wttr.in/Hamburg?0 | awk '{ print $5 }' | tail -1) mm - $(date +'%d.%m.%Y') - $(date +'%H:%M')>> hh.txt
|
Den tail kann der awk mit erledigen und ein date ist da zu viel: | $ echo "$(curl -s wttr.in/Hamburg?0 | awk '/mm/ {print $5}')mm $(date +'%Y-%m-%d - %H:%M')"
0.7mm 2019-05-23 - 23:09
|
oder auch so | $ curl -s wttr.in/Hamburg?0 | awk "-vts=$(date +'%Y-%m-%d - %H:%M')" '/mm/ {print $5 "mm " ts}'
0.7mm 2019-05-23 - 23:11
|
|
steamywindows
Anmeldungsdatum: 5. Mai 2018
Beiträge: 27
|
@rklm Das ist ohne Frage eleganter und effizienter gelöst!
$ curl -s wttr.in/Hamburg?0 | awk "-vts=$(date +'%Y-%m-%d - %H:%M')" '/mm/ {print $5 "mm " ts}'
Ich bin mit meinem Kenntnisstand immer froh, wenn etwas funktioniert. Mit Eleganz und Effizienz kämpfe ich noch 😉 Danke für den Hinweis auf den überflüssigen tail - das war mir noch nicht bekannt. Ein Hinweis für den TS:
eine Umlenkung mit > am Ende wird stets dazu führen, dass die Datei (hier: hh.txt) immer aufs neue überschrieben wird.
mit >> am Ende wird die Ausgabe der Kommandozeile an diese Datei angefügt.
|
yungmagnum
(Themenstarter)
Anmeldungsdatum: 13. Mai 2019
Beiträge: 11
|
Vielen Dank für die sehr sehr hilfreichen Antworten.
Ich habe das Kommando nun in ein Skript gepackt, mit Ausführungsrechten ausgestattet und bereits ausgeführt, was wunderbar funktionierte.
Nun möchte ich das Skript jedoch mit crontab alle 5 Minuten laufen lassen, bisher habe ich noch nicht mit crontab gearbeitet.
Ich habe mit
folgenden Befehl eingegeben: | 5 * * * * /home/hamburgwetter.sh
|
Oder müsste es | */5 * * * * /home/hamburgwetter.sh
|
heißen? Tut mir leid, falls der Ansatz sehr dumm ist, aber ich beschäftige mich erst seit ein paar Wochen mit Linux.
Vielen Dank!
|
steamywindows
Anmeldungsdatum: 5. Mai 2018
Beiträge: 27
|
Der zweite Ansatz wäre goldrichtig:
| */5 * * * * /home/hamburgwetter.sh
|
|
yungmagnum
(Themenstarter)
Anmeldungsdatum: 13. Mai 2019
Beiträge: 11
|
Hm, dann scheint etwas anderes nicht zu stimmen. Habe es genauso eingerichtet wie oben beschrieben, dennoch werden keine neuen Einträge in die txt-Datei geschrieben... ☹
|
steamywindows
Anmeldungsdatum: 5. Mai 2018
Beiträge: 27
|
Ja, dann stimmt etwas anderes nicht. Ich habe mal die Zeile von rklm genommen und in ein Skript gepackt (in /tmp/test.sh): | #!/bin/bash
curl -s wttr.in/Hamburg?0 | awk "-vts=$(date +'%Y-%m-%d - %H:%M')" '/mm/ {print $5 "mm " ts}' >> /tmp/hh.txt
|
Das ganze ausführbar gemacht mit:
und letztlich einen Eintrag in meiner crontab angelegt, genau wie Deinen: */1 * * * * /tmp/test.sh Damit erhalte ich eine Datei, in der genau das steht, was Du erhalten wolltest: cat /tmp/hh.txt
0.6mm 2019-05-24 - 19:49
0.6mm 2019-05-24 - 19:50
0.6mm 2019-05-24 - 19:51
0.6mm 2019-05-24 - 19:52
0.6mm 2019-05-24 - 19:53
0.6mm 2019-05-24 - 19:54
0.6mm 2019-05-24 - 19:55
0.6mm 2019-05-24 - 19:56
|
HarryD
Anmeldungsdatum: 14. Juni 2006
Beiträge: 2627
|
steamywindows schrieb: Der zweite Ansatz wäre goldrichtig:
| */5 * * * * /home/hamburgwetter.sh
|
In /home/ steht das Skript mit Sicherheit nicht. Wenn dann /home/<username>/hamburgwetter.sh; <username> ersetzen.
|
yungmagnum
(Themenstarter)
Anmeldungsdatum: 13. Mai 2019
Beiträge: 11
|
Habe das gestern beschriebene Problem nun gelöst, aber es hat sich leider ein neues ergeben. Ich weiß echt nicht, was ich falsch mache haha.
Bei den vorgeschlagenen Kommandos wurde mir in der txt-Datei, aber auch auf der Konsole immer nur ausgegeben, weshalb ich das Kommando auf die mir bekannten Befehle angepasst habe, was wunderbar auf der Konsole geklappt hat. | echo $(curl wttr.in/Hamburg?0 | grep '*** mm' | cut -f 15-21) - $(date +'%d.%m.%Y - %H:%M')
|
ergibt folgenden Ausgabe: | 0.0 mm - 25.05.2019 - 12:29
|
Sobald ich es jedoch mit dem crontab in die txt-Datei schreiben möchte, sieht die Ausgabe folgendermaßen aus: | 0.7 mmESC[0m - 25.05.2019 - 12:34
0.7 mmESC[0m - 25.05.2019 - 12:35
0.7 mmESC[0m - 25.05.2019 - 12:36
0.7 mmESC[0m - 25.05.2019 - 12:37
0.7 mmESC[0m - 25.05.2019 - 12:38
0.7 mmESC[0m - 25.05.2019 - 12:39
0.7 mmESC[0m - 25.05.2019 - 12:40
|
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12527
|
Du brauchst vermutlich die curl -Option "--silent".
|
yungmagnum
(Themenstarter)
Anmeldungsdatum: 13. Mai 2019
Beiträge: 11
|
ergibt folgendes:
| ESC[38;5;111m ‘ ‘ ‘ ‘ ESC[0m 1.0 mmESC[0m - 25.05.2019 - 13:27
|
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12527
|
Ja, die Sonderzeichen sind in der Ausgabe von wttr.in. Dann muss man besser filtern: | echo $(curl wttr.in/Hamburg?0 | egrep -o '[0-9]+\.[0-9]+ mm') - $(date +'%d.%m.%Y - %H:%M')
|
|