Отфильтровать файл журнала по месяцам, дате и времени в bash

Я хотел бы получить данные с Apr 24 10:00:00.000000 и Apr 25 24:00:00.999999 в следующем журнале, но я не уверен, как получить эту работу:

 files/file1:Apr 22 02:47:00.663117 somedata files/file1:Apr 23 04:47:00.663127 somedata files/file1:Apr 24 05:47:00.663137 somedata files/file1:Apr 24 10:47:00.663137 somedata files/file1:Apr 25 01:47:00.663147 somedata files/file1:Apr 25 23:47:00.663157 somedata files/file1:Apr 25 23:47:00.663167 somedata files/file1:Apr 26 23:47:00.663177 somedata 

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

 awk -v start=10:00:00.000000 -v stop=24:00:00.999999 'start <= $3 && $3 <= stop' 

Я бы хотел получить только следующие данные:

 files/file1:Apr 24 10:47:00.663137 somedata files/file1:Apr 25 01:47:00.663147 somedata files/file1:Apr 25 23:47:00.663157 somedata files/file1:Apr 25 23:47:00.663167 somedata 

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

  • проверять содержимое файла с помощью регулярных выражений bash
  • Как печатать определенные столбцы по имени?
  • Заменить колонку с результатом команды
  • Суммирование для поля, связанного с другим.
  • сравнить два файла и совпадения печати - большие файлы
  • разделитель полей awk + count в csv и номер строки печати
  • Применение математической функции к каждой строке в большом файле
  • Извлечение текстовых блоков на основе вывода grep
  • One Solution collect form web for “Отфильтровать файл журнала по месяцам, дате и времени в bash”

    Вы можете просто добавить больше переменных для фильтра дня:

     awk -v start_day=24 -v stop_day=25 -v start_time=10:00:00.000000 -v stop_time=24:00:00.999999 'start_day <= $2 && $2 <= stop_day && start_time <= $3 && $3 <= stop_time' file 

    доходность

     files/file1:Apr 24 10:47:00.663137 somedata files/file1:Apr 25 23:47:00.663157 somedata files/file1:Apr 25 23:47:00.663167 somedata 

    нам не хватает строки за 25 апреля, потому что мы слепо фильтруем время до 10 утра. Все, что нам нужно сделать, это реализовать логический тест для фильтрации времени только в течение первого дня:

     awk -v start_day=24 -v stop_day=25 -v start_time=05:00:00.000000 -v stop_time=05:00:00.999999 'start_day <= $2 && $2 <= stop_day && (start_time <= $3 || start_day != $2) && $3 <= stop_time' file 

    доходность

     files/file1:Apr 24 10:47:00.663137 somedata files/file1:Apr 25 01:47:00.663147 somedata files/file1:Apr 25 23:47:00.663157 somedata files/file1:Apr 25 23:47:00.663167 somedata 

    В течение нескольких месяцев вы можете следовать той же идее, но вам нужно перевести Apr на 04 (pre-processing или awk magic?) И применить к ней <= =>.

    Interesting Posts

    REISUB (клавиша Alt + SysRq +) не работает на Slackware13.37_64, KDE

    Гауссовский, который запускается с nohup на удаленной машине Linux, убивается, когда локальный компьютер отключается до выхода оболочки

    Заполнение имени файла zsh без учета регистра

    Linux Mint – сбой в экране Запись видеофайлов

    Необходимо передавать URL-адреса в кавычках

    Значение переменной \ перед средой

    Как прозрачно включить ccache для нескольких наборов инструментов?

    Как запустить собственный скрипт в качестве заставки в Openbox?

    Gnome-terminal и Zsh: сохранить текущий каталог на новой вкладке / окне

    Ограничьте размер tmpfs с помощью overlayroot

    awk-скрипт для удаления блоков в json

    sed – применять изменения в нескольких файлах

    Горячая точка и доступ в Интернет вместе – почему бы и нет?

    Винная или виртуальная бокс для Windows для проприетарного программного обеспечения?

    Как работает «ssh-copy-id» под капотом?

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