Добавить временные метки для вывода команды «top»

Я извлекаю некоторые показатели производительности из «top» и сохраняю их в файл

top -b | grep 'tesseract\|node\|java\|beam.smp\|dockerd' > testm.txt 

поэтому на каждую секунду я получаю следующий результат:

  535 rabbitmq 20 0 1246756 128432 5536 S 1.3 3.4 618:33.41 beam.smp 589 root 20 0 351040 47836 25740 S 0.0 1.3 12:38.72 dockerd 1980 root 20 0 2236796 36844 15980 S 0.0 1.0 6:11.59 java 1995 root 20 0 1766008 241428 21844 S 0.0 6.4 11:26.85 java 29965 root 20 0 1107460 63732 19328 S 0.0 1.7 0:01.69 node 

Мне интересно, как добавить временные метки для каждого фрагмента этого вывода, потому что при запуске этого скрипта в течение длительного периода времени становится невозможно узнать, когда был собран некоторый случайный фрагмент данных.

Заранее спасибо!

Добавление метки времени в каждую строку верхнего вывода для отдельного запуска top -b можно легко выполнить с помощью awk вместо grep для вашей фильтрации, поскольку awk имеет встроенные функции времени и может вводить их в свой вывод.

Я не выполняю большинство этих программ, поэтому я добавил bash и ssh в фильтр в своих примерах …

Вы можете сделать это с простой временной отметкой эпохи (секунды с 01-JAN-1970):

 top -b | awk '/bash|ssh|tesseract|node|java|beam.smp|dockerd/ {print systime(), $0}' 

Что меньше для хранения, а более чистое – для просмотра:

 bash-$ top -b | awk '/bash|ssh|tesseract|node|java|beam.smp|dockerd/ {print systime(), $0}' 1490018813 1229 root 20 0 891536 42868 28348 S 0.0 0.3 15:07.30 dockerd 1490018813 1240 root 20 0 65520 6208 5488 S 0.0 0.0 0:00.01 sshd 1490018813 2666 tim 20 0 24336 7136 3492 S 0.0 0.0 0:00.05 bash 1490018813 2710 tim 20 0 46984 5324 4644 S 0.0 0.0 0:09.08 ssh 1490018813 2783 root 20 0 105988 7184 6184 S 0.0 0.0 0:00.00 sshd 1490018813 2804 root 20 0 105988 7404 6408 S 0.0 0.0 0:00.00 sshd 

Или с более удобной для чтения меткой времени.

 top -b | awk '/bash|ssh|tesseract|node|java|beam.smp|dockerd/ {print strftime("%Y-%m-%d-%H:%M:%S", systime(), $0}' 

Что быстрее понять:

 bash-[541]$ top -b -n 3 | awk '/ssh|bash|java|dockerd/ {print strftime("%Y-%m-%d-%H:%M:%S", systime()), $0}' 2017-03-20-10:04:23 1229 root 20 0 891536 42868 28348 S 0.0 0.3 15:07.24 dockerd 2017-03-20-10:04:23 1240 root 20 0 65520 6208 5488 S 0.0 0.0 0:00.01 sshd 2017-03-20-10:04:23 2666 tim 20 0 24336 7136 3492 S 0.0 0.0 0:00.05 bash 2017-03-20-10:04:23 2710 tim 20 0 46984 5324 4644 S 0.0 0.0 0:09.08 ssh 2017-03-20-10:04:23 2783 root 20 0 105988 7184 6184 S 0.0 0.0 0:00.00 sshd 2017-03-20-10:04:23 2804 root 20 0 105988 7404 6408 S 0.0 0.0 0:00.00 sshd 2017-03-20-10:04:23 2909 tim 20 0 105988 5072 4072 S 0.0 0.0 0:00.20 sshd 2017-03-20-10:04:23 2931 tim 20 0 105988 4252 3224 S 0.0 0.0 0:00.00 sshd