Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Nov 2001

Hjälp mig lära mig awk

TLDR: Jag har en sträng med ett klockslag, ex. 14:48, i en txt-fil som jag vill dra bort 2 timmar från. Antar att jag kan få till det med awk + lite annat, men behöver hjälp att komma igång. Eller är jag helt ute och bör gå via date-operations?

Wall of text:

Jag har petat lite smått med bash och några script för att pyssla om mina utelampor hemma.
Nu har jag äntligen lite tid att förfina det något och känner att jag behöver hjälp att komma vidare.

Jag har ett script som hämtar tid för soluppgång och solnedgång och returnerar dessa som strängar.

pi@386pi /usr/local/bin/scripts $ more writetimes.sh #!/bin/bash sunrise=$(curl -s http://weather.yahooapis.com/forecastrss?w=906057 | grep astro nomy | awk -F\" '{print $2}'|{ date -f - +%R; }) sunset=$(curl -s http://weather.yahooapis.com/forecastrss?w=906057 | grep astron omy | awk -F\" '{print $4}'|{ date -f - +%R; }) echo $sunrise > /home/pi/sunrise.txt echo $sunset > /home/pi/sunset.txt exit

från http://forum.pimatic.org/topic/108/sunrise-and-sunset-device-...

Det scriptet körs just efter midnatt varje natt och sparar värdet i en textfil.

pi@386pi ~ $ more sunset.txt 14:48

Sen har jag ett cronjobb som läser upp filerna och schemalägger att tända och släcka lampor med "at"-kommandot som en vänlig själ här på forumet rekommenderade.

pi@386pi /usr/local/bin/scripts $ more onoff.sh #!/bin/bash # Get hours and minutes for sunrise and sunset file="/home/pi/sunset.txt" sunset=$(cat "$file") file="/home/pi/sunrise.txt" sunrise=$(cat "$file") #echo $sunrise #echo $sunset #at $sunrise today /usr/local/bin/tdtool -f 1 #at $sunset today /usr/local/bin/tdtool -n 1 echo '/usr/local/bin/tdtool -f 1' | at $sunrise echo '/usr/local/bin/tdtool -n 1' | at $sunset echo '/usr/local/bin/tdtool -f 2' | at $sunrise echo '/usr/local/bin/tdtool -n 2' | at $sunset exit

Som ni kanske ser så är det två set lampor som tänds vid solnedgång och släcks vid soluppgång. Jag skulle vilja ge dem lite offset, dvs göra till exempel tid från textfil + 2 timmar och tid från textfil -2 timmar, men jag får inte till det. Kan man konvertera strängen till HH:mm och göra vanliga date-operations på den eller bör man gå via awk eller något annat?

Tacksam för all hjälp.

/J

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Nov 2001

Fixade det själv. Behövde väl bara skriva frågan för att se var jag vurpat.

#!/bin/bash # Get hours and minutes for sunrise and sunset file="/home/pi/sunset.txt" sunset=$(cat "$file") file="/home/pi/sunrise.txt" sunrise=$(cat "$file") IFS=: read sunrise_hour sunrise_min <<< "$sunrise" IFS=: read sunset_hour sunset_min <<< "$sunset" sec_sunrise=$(date -d "1970-01-01 $sunrise_hour:$sunrise_min:00" +%s) sec_sunset=$(date -d "1970-01-01 $sunset_hour:$sunset_min:00" +%s) new_sunrise=$(date -d @$sec_sunrise +"%H:%M") X_sunrise=$(date -d "$new_sunrise") early_sunrise=$(date -d "$X_sunrise - 2 hours" +%H:%M) late_sunrise=$(date -d "$X_sunrise + 2 hours" +%H:%M)

Fulkod än sålänge