2013-12-13 3 views
1

Мне нужно добавить временную метку перед выходом долго исполняющейся команды («tcpdump», в моем случае использования).Как добавить метку времени к выходу на трубу?

Это - очень упрощена - выглядит как этот:

(echo A1; sleep 3; echo B2) | perl -MPOSIX -pe 'print strftime "%T ", localtime $^T; s/\d//' 

, который дает этот вид продукции:

16:10:24 A 
16:10:24 B 

т.е .: в Perl LocalTime (очевидно) вызывается, когда Perl вызывается.

Вместо этого мне нужен этот вид результата:

16:10:24 A 
16:10:27 B 

т.е .: метка времени должна быть относительно времени выходной сигнал поколения ...

Любой умный (или не такой умный решение :-)?

+2

вы пытались удалить '$^T'? – jfs

+0

Отлично! Это оно! Мне стыдно ... :-) – MarcoS

ответ

2

Просто удалите $^T из вашей команды Perl. Таким образом, вы будете использовать текущее время вместо времени начала процесса. См. docs for $^T.

Однако более элегантный формулировка с Perl будет:

... | perl -MPOSIX -ne's/\d//; print strftime("%T ", localtime), $_' 
1

Вы можете перенаправить вывод в:

awk '{ print strftime("%T"), $0; }' 

Пример:

while : ; do echo hey; sleep 1; done | awk '{ print strftime("%T"), $0; }' 
20:49:58 hey 
20:49:59 hey 
20:50:00 hey 
20:50:01 hey 
20:50:02 hey 
20:50:03 hey 
20:50:04 hey 
20:50:05 hey 

В качестве альтернативы можно использовать ts:

ts '%T' 
+0

Не могли бы вы написать полную команду? – MarcoS

+0

@MarcoS Полная команда: 'your_command | awk '{print strftime ("% T"), $ 0; } '' – devnull

+0

Извините, но (echo A; sleep 3; echo B) | perl -pe 's/мусор //' | awk '{print strftime ("% T"), $ 0; } ' работы не меняют вещи ... – MarcoS

1
(echo A1; sleep 3; echo B2) | perl -MPOSIX -pe 'print strftime "%T ", localtime; s/\d//' 

отлично работает для меня. Почему вы добавили $^T?

+0

Вы правы. Моя ошибка (слишком быстрая копия n'paste ... :-() – MarcoS

0

на Linux, вы можете использовать tcpdump -tttt для печати метки времени перед каждой выходной строкой.

# tcpdump -tttt -c 1 2>/dev/null 
2013-12-13 23:42:12.044426 IP 10.0.2.15.ssh > 10.0.2.2.53466: Flags [P.], seq 464388005:464388121, ack 16648998, win 65535, length 116 

Если ТСРйитр не имеет опцию -tttt, вы должны использовать AWK из devnull

Смежные вопросы