]> err.no Git - moreutils/commitdiff
ts: Support %.s for seconds sinch epoch with subsecond resolution. Closes: #619764
authorJoey Hess <joey@kitenet.net>
Fri, 1 Apr 2011 18:36:03 +0000 (14:36 -0400)
committerJoey Hess <joey@kitenet.net>
Fri, 1 Apr 2011 18:36:03 +0000 (14:36 -0400)
debian/changelog
ts

index d908784cac8a05054977d63e665b1662d72a7f81..3b4069c2d445c0100509890aa1478b34ca280e5f 100644 (file)
@@ -1,3 +1,10 @@
+moreutils (0.45) UNRELEASED; urgency=low
+
+  * ts: Support %.s for seconds sinch epoch with subsecond resolution.
+    Closes: #619764
+
+ -- Joey Hess <joeyh@debian.org>  Fri, 01 Apr 2011 14:34:15 -0400
+
 moreutils (0.44) unstable; urgency=low
 
   * pee: Propigate exit status of commands run.
diff --git a/ts b/ts
index 042cc18b8a0b4649874b229c039b7b9d79806bfc..c3755f4c1389307dc63339224c9655388987c364 100755 (executable)
--- a/ts
+++ b/ts
@@ -14,8 +14,9 @@ ts adds a timestamp to the beginning of each line of input.
 
 The optional format parameter controls how the timestamp is formatted,
 as used by L<strftime(3)>. The default format is "%b %d %H:%M:%S". In
-addition to the regular strftime conversion specifications, "%.S" is
-expanded to fractional seconds (ie, "30.00001").
+addition to the regular strftime conversion specifications, "%.S" and "%.s"
+are like "%S" and "%s", but provide subsecond resolution
+(ie, "30.00001" and "1301682593.00001").
 
 If the -r switch is passed, it instead converts existing timestamps in
 the input to relative times, such as "15m5s ago". Many common timestamp
@@ -61,9 +62,9 @@ my $use_format=@ARGV;
 my $format="%b %d %H:%M:%S";
 $format=shift if @ARGV;
 
-# For fractional seconds, Time::HiRes is needed.
+# For subsecond resolution, Time::HiRes is needed.
 my $hires=0;
-if ($format=~/\%\.S/) {
+if ($format=~/\%\.[Ss]/) {
        require Time::HiRes;
        $hires=1;
 }
@@ -74,7 +75,7 @@ while (<>) {
                        my $f=$format;
                        my ($seconds, $microseconds) = Time::HiRes::gettimeofday();
                        my $s=sprintf("%06i", $microseconds);
-                       $f=~s/\%\.S/%S.$s/g;
+                       $f=~s/\%\.([Ss])/%$1.$s/g;
                        print strftime($f, localtime($seconds));
                }
                else {