Назад | Перейти на главную страницу

Приставка iostat к текущему времени

Я хотел бы добавить к моему iostat выход для устройства sda с отметкой времени. Г-м-д H: M: S хватит. Однако это не кажется таким простым. Моя первая попытка была простой:

# 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 Я получаю некоторую информацию, но что здесь происходит?

Согласно https://meta.stackexchange.com/questions/172307/duplicate-questions-on-other-se-sites

На вопрос дан ответ Вот.

Moreutils включает 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

Имейте в виду, что, поскольку многие оболочки хранят свои строки внутри как cstrings, если вход содержит нулевой символ (\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] ")'