da meine awk Kenntnsse noch nicht so gut sind und ich immer noch auf der
Suche nach guten DEUTSCHEN tutorials bin, hbae ich eine Frage zu en
Fähigkeiten von awk:
Ich habe zwei Zeiten als Strings:
13:23:57 und 18:22:21
Was ich benötige ist die Zeitdifferenz in Sekunden dieser beiden Strings
als Ausgabe um es in einem Shellscript innerhalb einer IF Abfrage (if [
$diff < 90 ] then) nutzen zu können. Kann awk das? Wenn ja, wäre ich über
ein Codebeispiel oder den Verweis auf entsprechende deutsche Literatur
froh.
Gruß
Max
welches awk verwendest Du? Mit GNU awk (gawk) kann man
Zeitberechnungen durchfuehren. Mit anderen Dialekten
wird es etwas schwieriger.
[Tutorial]
Ich habe aus einem Vortrag in unserer Linux User Group
heraus ein Script zu awk verfasst und werde es irgend-
wann bis zum Sommer auch veroeffentlichen.
Ansonsten: in Englisch gibt es eine Menge Literatur und
auch eine gute Newsgroup mit Entwicklern -> comp.lang.awk
ist Dein Freund :-)
Stefan
.
>13:23:57 und 18:22:21
>
>Was ich benötige ist die Zeitdifferenz in Sekunden (...)
Kann (GNU) date das nicht?
FFPX Frederick
--
I can't be wrong, my modem's got error-correction.
Mach mal, das war gut. Irgendwo habe ich den Ausdruck noch rumliegen,
weiß nur nicht mehr, wo.
Warum liegt der Vortrag eigentlich nicht auf der LUG-Homepage?
Zur Frage: ich würde die Strings an den ":" zerlegen, mit 24 bzw. 60
multiplizieren und die Ergebnisse addieren. Dann kannst Du die Differenz
bilden.
Probleme:
- ist Zeit 2 immer nach Zeit1?
- kommt ein Tageswechsel mit dazu?
end
Andreas
--
Andreas Kretschmer
Linux - weil ich es mir wert bin!
GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net
Natürlich kann es das. Perl kann es auch, ebenso wie Python oder
Ruby. *Hier* war jedoch die Frage nach awk!
Spezielle Funktionen zum Rechnen mit Zeiten besitzt (wie schon von
einem anderen Poster erwähnt) GNU-awk (man gawk). Diese Funktionen
sind jedoch nicht portabel, d.h. nicht auf andere awk-Varianten
übertragbar.
Portabel kann man auch mit awk Zeitdifferenzen berechnen; man muss
das allerdings "zu Fuß" tun, also erstmal die Sekunden beider
Zeiten bezüglich einer Referenzzeit berechnen. Der Aufwand hierfür
hängt z.B. davon ab, wie weit die Zeiten maximal auseinander
liegen können, bzw. ob man unterschiedliche Monatslänge,
Schalttage oder gar Schaltsekunden berücksichtigen will oder muss.
So etwas wie
echo '13:23:57' |
awk '{ split($1,a,":"); print 3600*a[1]+60*a[2]+a[3] }'
könnte jedoch als Ansatz dienen. Referenzzeit ist hier der Beginn
des Tages.
Gruß, jsaul
--
Palo pa'que aprenda que aquí sí hay honor!
[Rubén Blades]
> So etwas wie
>
> echo '13:23:57' |
> awk '{ split($1,a,":"); print 3600*a[1]+60*a[2]+a[3] }'
>
> k”nnte jedoch als Ansatz dienen. Referenzzeit ist hier der Beginn
> des Tages.
>
Danke! Das war's. Ich habe mein Problem so gelöst:
{
split($1,a,":");
time1= 3600*a[1]+60*a[2]+a[3];
split($2,b,":");
time2= 3600*b[1]+60*b[2]+b[3];
diff= time2-time1;
print diff;
}
Gruß
Max
Du (maxW2002) meintest am 15.04.03:
> Danke! Das war's. Ich habe mein Problem so gelöst:
> {
> split($1,a,":");
> time1= 3600*a[1]+60*a[2]+a[3];
> split($2,b,":");
> time2= 3600*b[1]+60*b[2]+b[3];
> diff= time2-time1;
> print diff;
> }
Nur sicherheitshalber: die beiden Daten stammen stets vom gleichen
Tag?
Ansonsten dürfte "date" eher zu zuverlässigen Werten führen (Uhrzeit +
Datum).
Viele Grüße!
Helmut
> Nur sicherheitshalber: die beiden Daten stammen stets vom gleichen
> Tag?
> Ansonsten dürfte "date" eher zu zuverlässigen Werten führen (Uhrzeit +
> Datum).
>
> Viele Grüße!
> Helmut
>
Danke für den Hinweis. Ja, die Daten stammen immer vom selben Tag.
Gruß
Max
Du (maxW2002) meintest am 14.04.03:
> Ich habe zwei Zeiten als Strings:
> 13:23:57 und 18:22:21
> Was ich benötige ist die Zeitdifferenz in Sekunden dieser beiden
> Strings als Ausgabe um es in einem Shellscript innerhalb einer IF
> Abfrage (if [ $diff < 90 ] then) nutzen zu können.
Wie groß darf die Differenz werden?
Gelegentlich läßt sich ja die vielfache Multiplikation vermeiden
(obwohl das Subtrahieren im Sexagesimalsystem etwas ungewohnt ist).
Prinzip (Pseudo-Code)
Zeit2=Stunde2:Minute2:Sekunde2
Zeit1=Stunde1:Minute1:Sekunde1
Sekundendiff=Sekunde2-Sekunde1
if Sekundendiff<0 then
Sekundendiff=Sekundendiff+60
Minute1=Minute1+1
usw. ...
Viele Grüße!
Helmut
Kristian Koehntopp <kr...@koehntopp.de> wrote:
> "Awk" wurde vor ca. 7 Jahren in "perl" umbenannt.
Meins nicht, und das ist auch gut so ...
> Perl kann das.
Es gibt viele Sprachen, mit denen man das Problem loesen kann, und
deswegen heissen die doch nicht alle Perl ...
Tschuess,
Juergen Ilse (jue...@usenet-verwaltung.de)
--
[ Alfred Schulze ueber Norton Internet Security in dcsf ]
Es ist ja eigentlich auch nicht zum runterbekommen gemacht.
Normalerweise gehoert es genau wie ein Windows ein Leben
lang auf den Computer.
netter Spruch ;-)
>
> Perl kann das.
Stelle ich nicht in Frage.
Frage aber: besser? wie?
Der prinzipielle Weg dürfte gleich sein, oder übersehe ich etwas?
end
Andreas
--
Diese Message wurde erstellt mit freundlicher Unterstützung eines freilau-
fenden Pinguins aus artgerechter Freilandhaltung. Er ist garantiert frei
von Micro$oft'schen Viren. (#97922 http://counter.li.org) GPG 7F4584DA
Was, Sie wissen nicht, wo Kaufbach ist? Hier: N 51.05082°, E 13.56889° ;-)
Und nicht nur das, es kann auch noch 3000 andere Sachen mit tausenden
von Modulen und Q&D-Objektorientierung, etc.
Ich habe immer gerne mit perl gearbeitet. Seit Version 5 benutze ich
allerdings wieder AWK, da der Ganze OO-Mist + Module und anderem Unsinn
das ganze wieder so unübersichtlich und schwerfällig gemacht hat, dass
ich lieber mit AWK arbeite, der überall vorhanden und weniger
schwerfällig ist. Für „richtige“ Programmierung nutzt man besser Java
oder C++. Perl hat die Marktlücke, die es früher mal geschlossen hat
(zwischen sh/awk/sed und C/C++/Java/etc.) leider verlassen.
> Kristian
Bis denne ...
Marcus