Отфильтровать файл журнала по месяцам, дате и времени в 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 

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

  • Инструмент командной строки для извлечения строк из текстового файла
  • идентификация даты awk из входного файла
  • Как удалить символ новой строки из строк, предшествующих определенному шаблону?
  • Как заменить определенную строку с помощью sed или awk на основе команды run
  • проверка данных в столбцах, когда данные или некоторые могут отсутствовать или присутствовать?
  • Awk печатает первые три папки в дереве каталогов, разделяя их /
  • Шаблон совпадения, выполнить расчет и распечатать только 3 или 4 значения плавающего значения max
  • читать первый элемент в массиве
  • 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 - лучшая ОС в мире.