Как добавить / добавить временную метку для вывода grep?

Я запускаю небольшой сервер linux у себя дома, и я пишу скрипт для регистрации температуры ядер процессора каждые 5 секунд, но мне нужны временные метки, чтобы это было полезно. До сих пор у меня есть что-то, что сохраняет вывод команды sensors в файл, и у меня есть команда, которая печатает дату и время. Мне просто нужно выяснить, как объединить эти два.

sensors | grep ^Core* >> temps.log sensors | grep ^Core* >> temps.log сохраняет temps в temps.log в следующем формате:

 Core 0: +39.0°C (high = +76.0°C, crit = +100.0°C) Core 1: +40.0°C (high = +76.0°C, crit = +100.0°C) 

и на дату я могу либо сделать date +%m/%d/%y-%H:%M:%S которая возвращается

 mm/dd/yy-hh:mm:ss 

Я googled вокруг и увидел, что кто-то предлагает использовать gawk но я абсолютно не знаю, как работает gawk .

4 Solutions collect form web for “Как добавить / добавить временную метку для вывода grep?”

Если я правильно понимаю, то, что вы хотите выполнить, – это добавить текущую дату к каждой строке, выводимой grep. Это простая задача для сценария bash:

 sensors | grep ^Core |\ ( DATE=$(date +%m/%d/%y-%H:%M:%S) while read LINE do echo "$DATE $LINE" done ) >> temps.log 

скрипт для регистрации […] каждые 5 секунд […] Мне нужны временные метки […] цикл […] файл достигает определенного размера

Вам нужен инструмент, который принимает в качестве входных данных вывод журнала вашей основной программы и записывает его в файл журнала с размером файла и добавляет отметки времени. Существуют инструменты, которые делают это и многое другое. «Больше», что они делают, – это автоматическое вращение файла журнала, который также запускается по требованию, поддерживая каталог журналов текущего и старого журналов с ограниченным размером.

У вас есть выбор инструментов:

  • multilog Дэн Бернстайн из multilog
  • multilog Брюса Гюнтера от multilog -бис
  • s6-log Лорана Берко из s6
  • svlogd Gerrit Pape из runit
  • tinylog Уэйн Маршалл из tinylog
  • Мой cyclog из cyclog

Предположим, что многозадачная утилита, которая печатает ваш выходной лог каждые несколько секунд, например:

  #! / Bin / ш
 # монитор-сенсоры
 exec 2> & 1
 тогда как true
 делать
     датчиков
     спать 5
 сделано |  grep -line-buffered - '^ Core' 

Использование так же просто, как:

  • monitor-sensors | cyclog ./temps
  • monitor-sensors | multilog t ./temps

и его можно легко настроить:

  • monitor-sensors | cyclog --max-file-size 32768 --max-total-size 1048576 ./temps
  • monitor-sensors | s6-log t s32768 S1048576 ./temps
  • monitor-sensors | multilog t s32768 n5 ./temps

Отсюда, используя инструменты, такие как daemontools-encore / runit / perp / s6 / nosh, это всего лишь небольшой шаг для перемещения левой и правой сторон этого канала в программы run и выполнения этого как связанной пары реальных dæmons.

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

Некоторые из этих инструментов могут выполнять другие формы временных меток, но все они могут делать отметки времени TAI64N. Временные метки TAI64N предназначены для обеспечения наносекундной точности, хотя некоторые из вышеперечисленных не совсем реализуют это; предназначены для того, чтобы довольно счастливо справляться с такими вещами, как прыжки секунд, если ваша база данных TZ знает о них; и тривиальны для sort или даже sort -m .

Преобразование из временных меток TAI64N в локальное время текущего часового пояса (или, учитывая, что это всего лишь переменная окружения TZ , произвольный часовой пояс по вашему выбору) с использованием таких инструментов, как:

  • Дэн Бернстайн tai64nlocal от tai64nlocal
  • Брюс Гюнтер tai64nlocal от tai64nlocal -бис
  • Мой tai64nlocal от tai64nlocal

Смотрите такие журналы, в которых они написаны:

  • tail -F , хотя этот tail знает проблемы, когда есть очень быстрые вращения. (Это одна из нескольких известных проблем с tail известные проблемы, включая обработку усечения на месте файлов журнала, которые быстро сопровождаются большим количеством данных журнала. Эта проблема может быть вызвана низшими системами, такими как logrotate . К счастью, вышеупомянутые инструменты не обрезать файлы после их полной записи и не подвергать риску такие дополнительные проблемы с tail .)
  • Мои follow-log-directories из nosh, которые «знают» этот тип каталога журналов и используют «курсор» (постоянно поддерживается на диске), чтобы надежно отслеживать позицию в каталоге журнала, чтобы продолжить, даже если происходит несколько поворотов, когда журнал последователь не смотрит.

Другие виды обработки могут выполняться с помощью таких инструментов, как:

  • multilog-watch Русса Албери
  • logrange
  • multilog-stamptail Пола Кремера
  • Мой export-to-rsyslog из export-to-rsyslog

дальнейшее чтение

  • Джонатан де Бойн Поллард (2015). « Регистрация ». Семья демонов . Часто задаваемые ответы.
  • Брайан Кэнтрилл (2013). Как круиз удовольствия стал одиссеей . OmniIT Surge 2013. YouTube.
  • Брайан Кэнтрилл (2012-07-29). Поведение tail -f wrt truncation illumos-developers.
  • https://unix.stackexchange.com/a/294206/5132

@JdeBP уже ответил, что вы, вероятно, должны делать. Но это был не вопрос, который вы сделали. Поэтому любому, кто прибывает сюда из Google, пытаясь узнать, как добавлять / добавлять вещи к многострочному выводу, вот он:

Во-первых, ^Core* вероятно, не делает то, что вы думаете. Это регулярное выражение, которое соответствует строкам, начинающимся с «Cor», за которым следует любое количество «e» s: «Cor», «Core», «Coreeeee» и т. Д.

Во-вторых, xargs – отличный инструмент, особенно для однострочных и грязно-быстрых скриптов. Вы можете заставить xargs действовать в каждой строке ввода и выдать команду для каждого из них с параметром -I . Таким образом, вы можете легко сделать что-то вроде этого:

 sensors | grep '^Core*' | xargs -I{} echo "${stamp}: {}" >> temps.log 

Поместите '^Core*' кавычками, потому что вам не нужны неожиданные (хотя и маловероятные) расширения оболочки. {} xargs -I сообщает xargs для замены {} каждой строкой ввода в аргументах команды, которую он будет выполнять. Конечно, вы можете выбрать другой образец; Мне просто нравится имитировать синтаксис find -exec . ${stamp} предполагает, что вы сохранили дату / время в stamp .

Вы также можете поднять подоболочку, запустить команду date (указав любой формат, который вы хотите) в нем, и xargs используют свой стандартный вывод как часть ваших аргументов для echo :

 sensors | grep '^Core*' | xargs -I{} echo "$(date): {}" >> temps.log 

Опять же, то, что вы, вероятно, должны делать, это использовать проверенный и поддерживаемый инструмент для ведения журнала. Но я отвечаю здесь, как добавлять / добавлять временную метку для вывода grep , а не как правильно создавать журналы.

EDIT : пожалуйста, не просто вниз. Если вы найдете ошибку в этом ответе, по крайней мере, дайте мне знать, что это такое.

Я бы, наверное, сделал:

 parallel --tagstring `date -Iseconds` 'sensors | grep' ::: ^Core 

Он короткий, удобочитаемый для человека и красиво выглядит.

  • «Обновляет» zip-файл с опцией -FS изменяет время модификации файла?
  • По какому случаю будет изменен индекс inode?
  • Solaris + отметка времени файла отображения
  • команда / opt / bin / date -date '-15 минут 2016-04-27T14: 14: 47' результат за много часов до указанного времени
  • Преобразовать временную метку unix в hh: mm: ss: SSS (где SSS - миллисекунды) в AWK
  • Как получить приемлемую последнюю измененную временную метку для моего сайта Jekyll с помощью сценария оболочки?
  • Добавление метки времени в файл журнала с помощью команды cronjob
  • Удалите все файлы в папке, кроме последней (последней) 20
  • Временная отметка файла на установленном диске показывает 1 час отставания
  • Почему «touch -a» также устанавливает ctime?
  • Копирование новейших файлов
  • Interesting Posts

    Сценарий оболочки, выполняемый на удаленном компьютере, выходит после выполнения команды make

    Сложность создания регулярного выражения для поиска по меньшей мере двух вхождений символа в файл

    Разметка CentOS

    Двунаправленная ОС X и Fedora

    Задача для sed конвертировать код из Mathematica в Matlab

    Блокирует ли блок таймера systemd следующий запуск, если процесс еще не завершен?

    В Linux-системе без запуска X, как мне назначить правый ключ окна правой клавише управления?

    Сменить строки в текстовом файле только там, где содержатся строки с использованием sed или ed?

    Как выбрать строки и выполнить команду форматирования?

    CentOS: нужно разрешить порт 8080 в iptables

    Могу ли я установить Mint на другой жесткий диск без загрузки с него?

    BIOS не распознает мой загрузочный USB

    заменяя точку символом с помощью sed или perl

    Как пересканировать устройства шины scsi?

    Найдите и замените строку, если определенный шаблон найден в строке

    Linux и Unix - лучшая ОС в мире.