Как зайти в Даркнет?!
25th January, 01:11
6
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
895
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
948
0
Очень долго работает Update запрос Oracle
27th January, 09:58
914
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
906
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
938
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1724
0
период по дням
25th October, 10:44
3955
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3720
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4613
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4381
0
Помогите пожалуйста решить задачи
24th November, 23:53
6086
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4351
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4396
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Существует ли утилита Unix для добавления временных меток к stdin?
В конце концов я написал небольшой быстрый скрипт для этого в Python, но мне было интересно, есть ли утилита, в которую вы можете ввести текст, который будет дополнять каждую строку некоторым текстом-в моем конкретном случае, timestamp. В идеале, использование было бы чем-то вроде:
cat somefile.txt | prepend-timestamp
(Прежде чем вы ответите sed, я попробовал это:
cat somefile.txt | sed "s/^/`date`/"
Но это только один раз вычисляет команду date при выполнении sed, поэтому тот же timestamp неправильно добавляется к каждой строке.)
ts из moreutils будет добавлять timestamp к каждой строке ввода, которую вы ему даете. Вы также можете отформатировать его с помощью strftime.
$ echo 'foo bar baz' | ts
Mar 21 18:07:28 foo bar baz
$ echo 'blah blah blah' | ts '%F %T'
2012-03-21 18:07:30 blah blah blah
$
Установить его:
sudo apt-get install moreutils
Можно попробовать использовать awk :
<command> | awk '{ print strftime("%Y-%m-%d %H:%M:%S"), $0; fflush(); }'
Возможно, Вам потребуется убедиться, что <command> производит линейный буферизованный вывод, т. е. он сбрасывает свой выходной поток после каждой строки; timestamp awk добавляет время, когда конец строки появился на его входном канале.
Если awk показывает ошибки, то попробуйте gawk вместо этого.
аннотировать, доступный по этой ссылке или как annotate-output в пакете Debian devscripts .
$ echo -e "a\nb\nc" > lines
$ annotate-output cat lines
17:00:47 I: Started cat lines
17:00:47 O: a
17:00:47 O: b
17:00:47 O: c
17:00:47 I: Finished with exitcode 0
Как насчет этого?
cat somefile.txt | perl -pne 'print scalar(localtime()), " ";'
Судя по вашему желанию получить живые метки времени, может быть, вы хотите сделать живое обновление файла журнала или что-то еще? Может быть
tail -f /path/to/log | perl -pne 'print scalar(localtime()), " ";' > /path/to/log-with-timestamps
Просто выкину это: в daemontools есть пара утилит под названием tai64n и tai64nlocal , которые предназначены для добавления временных меток в сообщения журнала.
Пример:
cat file | tai64n | tai64nlocal
Ответ Кирона пока самый лучший. Если у вас возникли проблемы из-за того, что первая программа буферизует его, вы можете использовать программу unbuffer:
unbuffer <command> | awk '{ print strftime("%Y-%m-%d %H:%M:%S"), $0; }'
Он установлен по умолчанию на большинстве систем linux. Если вам нужно построить его самостоятельно это часть пакета expect
Вот мое решение awk (из системы Windows/XP с инструментами MKS, установленными в каталоге C:\bin). Он предназначен для добавления текущей даты и времени в виде mm/dd hh:mm в начало каждой строки, получив эту timestamp из системы при чтении каждой строки. Вы можете, конечно, использовать шаблон BEGIN для извлечения timestamp один раз и добавить этот timestamp к каждой записи (все равно). Я сделал это, чтобы пометить файл журнала, который был сгенерирован для stdout с timestamp в момент создания сообщения журнала.
/"pattern"/ "C\:\\\\bin\\\\date '+%m/%d %R'" | getline timestamp;
print timestamp, $0;
где "pattern"-строка или regex (без кавычек), которые должны быть сопоставлены в строке ввода, и является необязательным, если вы хотите сопоставить все входные строки.
Это должно работать и на системах Linux/UNIX, просто избавьтесь от C\:\\bin\ \ выхода из строки
"date '+%m/%d %R'" | getline timestamp;
Это, конечно, предполагает, что команда "date" возвращает вас к стандартной команде Linux/UNIX date display/set без конкретной информации о пути (то есть ваша переменная среды PATH правильно настроена).
Смешивая некоторые ответы выше от natevw и Frank Ch. Эйглер.
Он имеет миллисекунды, работает лучше, чем вызов внешней команды date каждый раз, и perl можно найти в большинстве серверов.
tail -f log | perl -pne '
use Time::HiRes (gettimeofday);
use POSIX qw(strftime);
($s,$ms) = gettimeofday();
print strftime "%Y-%m-%dT%H:%M:%S+$ms ", gmtime($s);
'
Альтернативная версия с потоком и чтением в цикле:
tail -f log | perl -pne '
use Time::HiRes (gettimeofday); use POSIX qw(strftime);
$|=1;
while(<>) {
($s,$ms) = gettimeofday();
print strftime "%Y-%m-%dT%H:%M:%S+$ms $_", gmtime($s);
}'
$ cat somefile.txt | sed "s/^/`date`/"
$ cat somefile.txt | sed "s/^/`date`/"
вы можете сделать это (с gnu/sed ):
$ some-command | sed "x;s/.*/date +%T/e;G;s/\n/ /g"
образец:
$ { echo 'line1'; sleep 2; echo 'line2'; } | sed "x;s/.*/date +%T/e;G;s/\n/ /g"
20:24:22 line1
20:24:24 line2
конечно, вы можете использовать и другие опции программы date . просто замените date +%T на то, что вам нужно.
Отказ от ответственности: решение, которое я предлагаю, не является встроенной утилитой Unix.
Я столкнулся с подобной проблемой несколько дней назад. Мне не понравился синтаксис и ограничения вышеприведенных решений, поэтому я быстро собрал программу в Go, чтобы сделать эту работу за меня.
Вы можете проверить этот инструмент здесь: preftime
В разделе Releases проекта GitHub имеются готовые исполняемые файлы для Linux, MacOS и Windows.
Инструмент обрабатывает неполные выходные строки и имеет (с моей точки зрения) более компактный синтаксис.
<command> | preftime
Это не идеально, но я думаю, что поделюсь им, если это кому-то поможет.
делаем это с date и tr и xargs на OSX:
alias predate="xargs -I{} sh -c 'date +\"%Y-%m-%d %H:%M:%S\" | tr \"\n\" \" \"; echo \"{}\"'"
<command> | predate
если вы хотите миллисекунды:
alias predate="xargs -I{} sh -c 'date +\"%Y-%m-%d %H:%M:%S.%3N\" | tr \"\n\" \" \"; echo \"{}\"'"
но обратите внимание, что на OSX, date не дает вам опцию %N, поэтому вам нужно будет установить gdate (brew install coreutils ) и, наконец, прийти к этому:
alias predate="xargs -I{} sh -c 'gdate +\"%Y-%m-%d %H:%M:%S.%3N\" | tr \"\n\" \" \"; echo \"{}\"'"
Если значение, которое вы добавляете, одинаково в каждой строке, запустите emacs вместе с файлом, а затем:
Ctrl + <space>
в начале файла (чтобы отметить это место), затем прокрутите вниз до начала последней строки (Alt + > будет идти до конца файла... который, вероятно, также будет включать клавишу Shift, а затем Ctrl + a, чтобы перейти к началу этой строки) и:
Ctrl + x r t
Это команда для вставки в только что указанный прямоугольник (прямоугольник с шириной 0).
2008-8-21 6:45PM <enter>
Или все, что вы хотите добавить... затем вы увидите, что текст добавляется к каждой строке в пределах прямоугольника 0 ширины.
UPDATE: я только что понял, что тебе не нужна дата SAME, так что это не сработает... хотя вы можете сделать это в emacs с немного более сложным пользовательским макросом, но все же, этот вид редактирования прямоугольника довольно приятно знать...