web-dev-qa-db-ja.com

ナノ秒の精度でmoreutilsのtsに配管しますか?

このシステムでは:

$ cat /etc/issue
Ubuntu 14.04.4 LTS \n \l
$ uname -a
Linux mypc 3.19.0-56-generic #62~14.04.1-Ubuntu SMP Fri Mar 11 11:03:33 UTC 2016 i686 i686 i686 GNU/Linux
$ apt-show-versions -r moreutils
liblist-moreutils-Perl:i386/trusty 0.33-1build3 uptodate
moreutils:i386/trusty 0.50 uptodate

... dateをナノ秒の精度で使用できます。問題ありません:

$ date +'%Y%m%d%H%M%S'
20160327133441
$ date +'%Y%m%d%H%M%S%N'
20160327133446582969969

...ただし、moreutils'tsで同じフォーマット文字列を使用すると、ナノ秒の精度が失敗します。

$ ping google.com | ts '%Y%m%d%H%M%S%N'
20160327133829%N PING google.com (216.58.209.110) 56(84) bytes of data.
20160327133829%N 64 bytes from arn06s07-in-f14.1e100.net (216.58.209.110): icmp_seq=1 ttl=54 time=32.0 ms
20160327133830%N 64 bytes from arn06s07-in-f14.1e100.net (216.58.209.110): icmp_seq=2 ttl=54 time=31.6 ms
^C

タイムスタンプをstdinの前に付けるときに、tsを取得してナノ(またはマイクロ)秒の精度を表示する方法はありますか?

6
sdaau

Moreutils0.31から開始%.S指定子が使用可能です。%Sの代わりに使用してください:

ping google.com | ts '%Y%m%d-%H:%M:%.S'
20160327-15:01:11.361885 PING google.com (216.58.209.206) 56(84) bytes of data.
20160327-15:01:11.362056 64 bytes from bud02s22-in-f206.1e100.net (216.58.209.206): icmp_seq=1 ttl=57 time=26.3 ms
20160327-15:01:12.314243 64 bytes from bud02s22-in-f206.1e100.net (216.58.209.206): icmp_seq=2 ttl=57 time=26.2 ms
20160327-15:01:13.315651 64 bytes from bud02s22-in-f206.1e100.net (216.58.209.206): icmp_seq=3 ttl=57 time=26.3 ms
8
Tagwint

V0.62以降、「%T」指定子にも高解像度の種類があります。

$ for i in {1..5}; do hostname; done | ts '[%F %.T]'
[2018-05-27 17:25:14.153490] quark
[2018-05-27 17:25:14.153753] quark
[2018-05-27 17:25:14.153779] quark
[2018-05-27 17:25:14.153798] quark
[2018-05-27 17:25:14.153816] quark
2
atomicstack