Отфильтровать файл журнала по месяцам, дате и времени в 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 по очереди
  • Как найти все соответствия регулярному выражению в строке
  • Как объединить два файла с общим ключом в awk?
  • Проблема с awk ward
  • Использование Grep -o или Sed / Awk для захвата фрагмента из середины строки
  •  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 

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

  • Предложение xargs grep
  • Лучший способ запустить серию из семи одинаковых команд в sed?
  • Как удвоить каждую строку и изменить цифры в каждой строке по-разному в Linux?
  • Regex не работает с grep
  • Множественное сопоставление столбцов и настройка с помощью awk
  • Замена строки на основе номера строки
  • 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?) И применить к ней <= =>.

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