Nano Hash - криптовалюты, майнинг, программирование

Как получить данные за последний час, 6 часов, 24 часа из файла журнала CSV с помощью awk, sed или другого?

У меня есть файл журнала csv в следующем формате. Я не очень хорошо разбираюсь в awk/sed. Кто-нибудь скажет мне, как извлечь данные за последний час, 6 часов и 24 часа.

Это формат моего журнала:

blabla,11:04:44,Alarm,121,TBD,TBD
blabla,11:04:50,Alarm,121,TBD,00:00:05
blabla,11:04:54,Warning,121,00:00:09,00:00:05
blabla,11:06:12,Alarm,125,TBD,TBD
blabla,11:06:42,Alarm,125,TBD,00:00:29
blabla,16:06:55,Warning,125,00:00:41,00:00:29
blabla,16:09:13,Alarm,125,TBD,TBD
blabla,16:10:32,Alarm,125,TBD,TBD
blabla,16:14:50,Alarm,125,TBD,TBD
blabla,16:15:00,Normal,125,00:00:10,TBD
blabla,16:15:03,Normal,125,00:00:10,00:00:13
blabla,20:04:08,Alarm,121,TBD,TBD
blabla,20:04:21,Normal,121,00:00:13,TBD
blabla,20:04:25,Normal,121,00:00:13,00:00:16
blabla,20:06:12,Alarm,125,TBD,TBD

Итак, если предположить, что сейчас 21:00:00, и мне нужны данные за прошедший час, результат будет таким:

blabla,20:04:08,Alarm,121,TBD,TBD
blabla,20:04:21,Normal,121,00:00:13,TBD
blabla,20:04:25,Normal,121,00:00:13,00:00:16
blabla,20:06:12,Alarm,125,TBD,TBD

За последние 6 часов вывод должен быть:

blabla,16:06:55,Warning,125,00:00:41,00:00:29
blabla,16:09:13,Alarm,125,TBD,TBD
blabla,16:10:32,Alarm,125,TBD,TBD
blabla,16:14:50,Alarm,125,TBD,TBD
blabla,16:15:00,Normal,125,00:00:10,TBD
blabla,16:15:03,Normal,125,00:00:10,00:00:13
blabla,20:04:08,Alarm,121,TBD,TBD
blabla,20:04:21,Normal,121,00:00:13,TBD
blabla,20:04:25,Normal,121,00:00:13,00:00:16
blabla,20:06:12,Alarm,125,TBD,TBD

И т.п.

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

awk '$0>=from && $0<=to' from="$(date +"%H:%M:%S -d '1 hour ago'")" to="$(date +"%H:%M:%S")" logfile.csv (this actually produces error unexpected EOF while looking for matching)

а также

sed -n "/^[^,]*,[^$(date --date='24 hours ago' '+%H:%M:%S'),],[^,]*,[^,]*,[^,]*,[^,]*/,\$p" logfile.csv

  • Как мы можем определить, к какой дате относится каждая метка времени? Я имею в виду, если сейчас 21:00:00 и в файле есть отметка времени 20:30:00, как мы узнаем, что это отметка времени с сегодняшнего дня (‹ 1 час назад) против вчерашнего дня (> 1 час назад). 24.02.2020
  • @EdMorton Эд, цель состояла в том, чтобы сохранить только последние 24 часа журнала, обрабатывать его и перезаписывать каждую секунду с начала журнала, чтобы никакие записи никогда не были старше 24 часов. Теперь я думаю, что это плохой дизайн журнала (не по моему выбору), и я думаю, что добавлю еще одно поле для хранения времени в секундах с начала эпохи для каждой записи журнала. Это должно упростить анализ журнала для любого периода времени, вы согласны? 24.02.2020
  • Да, так было бы легче. Между прочим, ваши временные метки в UTC? Лучше бы они были. 24.02.2020
  • Хорошо, отлично, я попробую это. Нет, временные метки — это локальное системное время. Система полностью изолирована от сети, поэтому я подумал, что это должно быть приемлемо... 24.02.2020

Ответы:


1

Использование Miller (https://github.com/johnkerl/miller) и запуск

mlr --csv -N put '$sourcetime=$2' \
then nest --explode --values --across-fields --nested-fs ":" -f 2 \
then put '$seconds=$2_1*3600+$2_2*60+$2_3' \
then filter '(21*3600-$seconds)<3600'  \
then cut -x -r -f '(_|sec)' input

у тебя будет

+--------+--------+-----+----------+----------+------------+
| blabla | Alarm  | 121 | TBD      | TBD      | 20:04:08   |
| blabla | Normal | 121 | 00:00:13 | TBD      | 20:04:21   |
| blabla | Normal | 121 | 00:00:13 | 00:00:16 | 20:04:25   |
| blabla | Alarm  | 125 | TBD      | TBD      | 20:06:12   |
+--------+--------+-----+----------+----------+------------+
  • Я преобразовал время в секунды ($seconds=$2_1*3600+$2_2*60+$2_3);
  • и отфильтровать, начиная с 21:00:00 (в секундах это 21*3600), все записи за последний час (в секундах это 3600), используя '(21*3600-$seconds)<3600'.

Вы можете изменить по своему усмотрению параметры фильтра

24.02.2020

2

Ваша попытка AWK почти завершена:

$ awk  -F, '$2 >= from' from=$(date -d "6 hours ago" +%H:%M:%S) sample.txt

blabla,20:04:08,Alarm,121,TBD,TBD
blabla,20:04:21,Normal,121,00:00:13,TBD
blabla,20:04:25,Normal,121,00:00:13,00:00:16
blabla,20:06:12,Alarm,125,TBD,TBD

Вам нужно использовать -F,, чтобы сообщить awk о разделении на ,. Это позволяет использовать даже строки «20:04:08» > «20:00:00». Однако для других форматов вам может потребоваться выполнить некоторые математические операции.

Я не думаю, что sed будет работать, он не может сравнивать строки, и у вас, вероятно, не будет точного совпадения в журнале. Если вы знаете, что время существует в файле, это тривиально:

sed -n '/20:04:08/,$p' sample.txt
blabla,20:04:08,Alarm,121,TBD,TBD
blabla,20:04:21,Normal,121,00:00:13,TBD
blabla,20:04:25,Normal,121,00:00:13,00:00:16
blabla,20:06:12,Alarm,125,TBD,TBD
25.02.2020
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..