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

Команда Unix для отметки времени вывода файла, но с указанием времени начала?

Существует множество программ (например, ts в moreutils) и различные однострочники bash для добавления к выходным данным команды / конвейера метки времени, когда эта строка была «напечатана».

Однако существует ли команда, которая для каждой полученной строки будет печатать время с момента запуска команды (и / или когда она впервые увидела строку) и текущую строку? Таким образом, вместо того, чтобы печатать текущее время, он напечатает, сколько времени прошло с момента запуска этой команды? (как и линия)

При выполнении команд, которые требуют времени и выводят много данных, может быть полезно знать, как долго вы на них смотрели.

Было бы тривиально создать простую команду, но я не хочу изобретать колесо заново.

Это в системе Ubuntu Linux.

Вот один из способов:

#!/bin/bash
SECONDS=0    # it will already be initialized to zero at the start of the script
while read -r line
do
    echo "$SECONDS: $line"
done < file    # or < <(command)

SECONDS - это переменная, которая автоматически увеличивается каждую секунду.

Что ж, похоже, есть недокументированные (отсутствует на некоторых страницы руководства) варианты для ts которые делают именно то, что вы хотите.

Из моей системы man ts:

Если -i или -s переключатель пройден, ts сообщает инкрементные отметки времени вместо абсолютных. Формат по умолчанию изменится на "%H:%M:%S", и "%.S" и "%.s" также можно использовать. В случае -i, каждая временная метка будет временем, прошедшим с последней временной метки. В случае -s, используется время, прошедшее с момента запуска программы.

В -m переключатель позволяет использовать монотонную синхронизацию системы.

Не уверен, существовали ли они, когда вы спросили, но человек сказал: «Copyright 2006».

пример

cameron@linux:~$ (echo a; sleep 1; echo b; sleep 2; echo c) | ts -i 'delta: %.S' | ts -s 'abs: %.S'
abs: 00.000007 delta: 00.000009 a
abs: 00.973008 delta: 00.972945 b
abs: 02.974591 delta: 02.001582 c