在 iostat 前面加上当前时间

在 iostat 前面加上当前时间

我想iostat为设备添加输出前缀星展银行带有时间戳。年日 时:分:秒就足够了。然而,这似乎不那么简单。我的第一次尝试很简单:

# vi just_echo                                                                                                                                                                                                                                         
mystamp=$(date '+%Y-%m-%d %H:%M:%S')
cat /dev/stdin | grep sda | sed "s/sda/$mystamp/"

# iostat 5 | ./just_echo                                                                                                                                                                                                                               

但是这不会产生任何输出。如果我删除,sed我会得到一些输出,但是这里发生了什么?

答案1

按照https://meta.stackexchange.com/questions/172307/duplicate-questions-on-other-se-sites

问题得到解答这里

更多工具包括ts做得很好的:

command | ts '[%Y-%m-%d %H:%M:%S]'

它也消除了循环的需要,每一行输出都会有一个时间戳。

$ echo -e "foo\nbar\nbaz" | ts '[%Y-%m-%d %H:%M:%S]'
[2011-12-13 22:07:03] foo
[2011-12-13 22:07:03] bar
[2011-12-13 22:07:03] baz

您想知道服务器何时重新启动吗?只需运行ping | ts,问题就解决了 :D。


如果您想要不使用的其他方法ts

POSIX 外壳

请记住,由于许多 shell 将其字符串在内部存储为 cstring,因此如果输入包含空字符 ( \0),则可能会导致行过早结束。

command | while IFS= read -r line; do printf '[%s] %s\n' "$(date '+%Y-%m-%d %H:%M:%S')" "$line"; done

GNU awk

command | gawk '{ print strftime("[%Y-%m-%d %H:%M:%S]"), $0 }'

Perl

command | perl -pe 'use POSIX strftime; print strftime "[%Y-%m-%d %H:%M:%S] ", localtime'

Python

command | python -c 'import sys,time;sys.stdout.write("".join(( " ".join((time.strftime("[%Y-%m-%d %H:%M:%S]", time.localtime()), line)) for line in sys.stdin )))'

红宝石

command | ruby -pe 'print Time.now.strftime("[%Y-%m-%d %H:%M:%S] ")'

相关内容