Вопрос: добавление метки времени в хвост -f результатов


Я хотел бы, чтобы перед каждой строкой, выходящей из «tail -f outputfile», была напечатана метка времени, так что я знаю, когда печатается каждая строка. Что-то вроде:

[...]
20110617_070222: результаты, напечатанные здесь
20110617_070312: результаты, напечатанные здесь
20110617_070412: результаты, напечатанные здесь
20110617_070513: результаты, напечатанные здесь
[...]

Есть идеи?


4
2018-06-17 06:04


Источник


Обратите внимание, что вы не получаете то, что вы просили. Ответы, полученные вами, основаны на предположении, что вы не возражаете против ошибок времени, связанных с тем, что это те времена, когда tail записывает на свой стандартный вывод, не время, когда строки были записаны в исходный файл в первую очередь. Вы можете не возражать, но помните об этом предположении, вытекающем из вашего вопроса, как написано. - JdeBP


Ответы:


Вероятно, это не так короче:

tail -f outputfile | xargs -IL date +"%Y%m%d_%H%M%S:L"

Обратите внимание, что я использовал формат timestamp, предложенный вашим вопросом, но вы можете использовать что-либо, поддерживаемое date (синтаксис формата поддерживается стандартной BSD и датой GNU).


5
2018-02-24 07:09



Обратите внимание, что xargs игнорирует пустые строки. Для моей пользы, это нормально, но ваше облегчение может измениться. - David Ongaro
Это сломается, если xargs столкнется с непревзойденной ценой " в линии. - MarSoft
Понимаю. Может быть tail -f outputfile | tr '\n' '\0' | xargs -0IL date +"%Y%m%d_%H%M%S:L" лучше в этом случае? Также работает с пустыми строками. - David Ongaro


Напишите простой скрипт для этого. Вот пример в perl:

#!/usr/bin/perl
while(<>) {
    print localtime . ": $_";
}

Чтобы использовать скрипт, просто проведите через него свой хвост:

tail -f outputfile | ./prepend_timestamp.pl

Вы также можете сделать это inline:

tail -f outputfile | perl -pe '$_ = localtime.": $_"'

6
2018-06-17 06:11





С AWK:

tail -f infile | awk '{"date \"+%Y%m%d_%H%M%S\"" | getline now} {close("date")} {print now ": " $0}'

1
2018-06-17 06:28



Это печатает одно и то же время для всех строк в моем случае, даже если они появляются 10 секунд appart. - Georges Dupéron