From: joeyh Date: Fri, 18 Aug 2006 05:46:19 +0000 (+0000) Subject: * Change the default ts format to include the month and day, for consistency X-Git-Tag: 0.16~2 X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=de4c5fde3d86ae278e71b102f640b110f361bda2;p=moreutils * Change the default ts format to include the month and day, for consistency with syslog format. * Add -r switch to ts, which makes it convert existing timestamps in the input into relative times, such as "15m2s ago". --- diff --git a/debian/changelog b/debian/changelog index 966b116..1040cdf 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,12 @@ +moreutils (0.16) UNRELEASED; urgency=low + + * Change the default ts format to include the month and day, for consistency + with syslog format. + * Add -r switch to ts, which makes it convert existing timestamps in + the input into relative times, such as "15m2s ago". + + -- Joey Hess Fri, 18 Aug 2006 01:36:37 -0400 + moreutils (0.15) unstable; urgency=low * Remove notes about potential tools from README, moved to wiki. diff --git a/debian/control b/debian/control index 8c6fc6f..ced07eb 100644 --- a/debian/control +++ b/debian/control @@ -8,6 +8,7 @@ Standards-Version: 3.7.2 Package: moreutils Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, ${perl:Depends} +Suggests: libtime-duration-perl, libtimedate-perl Description: additional unix utilities This is a growing collection of the unix tools that nobody thought to write thirty years ago. diff --git a/ts b/ts index 42a1ce4..de620c8 100755 --- a/ts +++ b/ts @@ -6,14 +6,24 @@ ts - timestamp input =head1 SYNOPSIS -ts [format] +ts [-r] [format] =head1 DESCRIPTION -ts adds a timestamp to the beginning of each line of input +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. The default format is "%H:%M:%S". +as used by L. The default format is "%b %d %H:%M:%S". + +If the -r switch is passed, it instead converts existing timestamps in +the input to relative times, such as "15m5s ago". Many common timestamp +formats are supported. Note that the Time::Duration and Date::Parse perl +modules are required for this mode to work. + +=head1 ENVIRONMENT + +The standard TZ environment variable controls what time zone dates +are assumed to be in, if a timezone is not specified as part of the date. =head1 AUTHOR @@ -27,11 +37,49 @@ use warnings; use strict; use POSIX q{strftime}; -my $format="%H:%M:%S"; -$format=shift if @ARGV; - $|=1; +my $rel=0; +use Getopt::Long; +GetOptions("r" => \$rel) || die "usage: ts [-r] [format]\n"; + +if ($rel) { + eval q{ + use Date::Parse; + use Time::Duration; + }; + die $@ if $@; +} + +my $format="%b %d %H:%M:%S"; +$format=shift if @ARGV; + while (<>) { - print strftime($format, localtime)." ".$_; + if (! $rel) { + print strftime($format, localtime)." ".$_; + } + else { + s{\b( + \d\d[-\s\/]\w\w\w # 21 dec 17:05 + (?:\/\d\d+)? # 21 dec/93 17:05 + [\s:]\d\d:\d\d # (time part of above) + (?::\d\d)? # (optional seconds) + (?:\s+[+-]\d\d\d\d)? # (optional timezone) + | + \w{3}\s+\d\d\s+\d\d:\d\d:\d\d # syslog form + | + \d\d\d[-:]\d\d[-:]\d\dT\d\d:\d\d:\d\d.\d+ # ISO-8601 + | + (?:\w\w\w,?\s+)? # (optional Day) + \d+\s+\w\w\w\s+\d\d+\s+\d\d:\d\d:\d\d + # 16 Jun 94 07:29:35 + (?:\s+\w\w\w|\s+-\d\d\d\d)? + # (optional timezone) + )\b + }{ + concise(ago(time - str2time($1), 2)) + }exg; + + print $_; + } }