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