Gibt es in Linux einen Shell-Befehl, um die Zeit in Millisekunden zu erhalten?
Antworten
Zu viele Anzeigen?Wenn Sie GNU AWK seit Version 4.1 verwenden, können Sie die Zeitbibliothek laden und Folgendes tun:
$ awk '@load "time"; BEGIN{printf "%.6f", gettimeofday()}'
Dies druckt die aktuelle Zeit in Sekunden seit 1970-01-01T00:00:00 mit Subsekunden-Genauigkeit aus.
the_time = gettimeofday()
Gibt die vergangene Zeit seit dem 01.01.1970 UTC in Sekunden als Gleitkommazahl zurück. Wenn die Zeit auf dieser Plattform nicht verfügbar ist, wird-1
zurückgegeben undERRNO
gesetzt. Die zurückgegebene Zeit sollte eine Subsekundenpräzision haben, aber die tatsächliche Genauigkeit kann je nach Plattform variieren. Wenn der Standard-C-Systemaufrufgettimeofday()
auf dieser Plattform verfügbar ist, gibt er einfach den Wert zurück. Andernfalls versucht er auf MS-Windows,GetSystemTimeAsFileTime()
zu verwenden.Quelle: <a href="https://www.gnu.org/software/gawk/manual/gawk.html#Extension-Sample-Time" rel="nofollow noreferrer">GNU awk Handbuch</a>
Auf Linux-Systemen liefert die Standard-C-Funktion getimeofday()
die Zeit mit Mikrosekunden-Genauigkeit zurück.
Perl kann dafür verwendet werden, sogar auf exotischen Plattformen wie AIX. Beispiel:
#!/usr/bin/perl -w
use strict;
use Time::HiRes qw(gettimeofday);
my ($t_sec, $usec) = gettimeofday ();
my $msec= int ($usec/1000);
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
localtime ($t_sec);
printf "%04d-%02d-%02d %02d:%02d:%02d %03d\n",
1900+$year, 1+$mon, $mday, $hour, $min, $sec, $msec;
Um Dezimalsekunden auszugeben:
start=$(($(date +%s%N)/1000000)) \
&& sleep 2 \
&& end=$(($(date +%s%N)/1000000)) \
&& runtime=$((end - start))
divisor=1000 \
&& foo=$(printf "%s.%s" $(( runtime / divisor )) $(( runtime % divisor ))) \
&& printf "Laufzeit %s\n" $foo # in bash integer cannot cast to float
Ausgabe: Laufzeit 2.3