Фильтровать большие наборы данных в датах с командной строкой

У меня есть огромные наборы данных, которые состоят из значений, разделенных вкладкой, которые хранятся в строках. Пример строки выглядит так:

Dec 4 14:37:36.381651 algorc1 [27751:l@27932]/error: [] - [T0000A124M5] Didn't receive message! 

Я хочу отфильтровать все помехи до определенного времени в определенную дату.

Мои мысли таковы:

 grep <file> | select everything in first column larger than date | select everything in second column larger than time 

Я просто не знаю, как я могу выбрать по столбцу, и я не знаю о более крупных и меньших датах и ​​времени.

Поэтому я не знаю, что много ;-).

2 Solutions collect form web for “Фильтровать большие наборы данных в датах с командной строкой”

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

 sed -n '/Dec 4 14:37:36.381651/,/Dec 5 14:32:36.391572/' filename 

Вы не можете округлить эти время / даты до значений, которые не существуют. Например:

 sed -n '/Dec 4 14:30:00.000000/,/Dec 5 14:29:59.999999/' filename 

не будет работать, если указанное время не было в журнале.


Если вы хотите отфильтровать между двумя произвольными временем / датами, которые не находятся в журнале, то awk может помочь:

 awk 'BEGIN {FS=":| +"} {current = mktime("2014 "c($1)" "$2" "$3" "$4" "$5); if (current >= mktime ("2014 12 04 14 30 0") && current <= mktime("2014 12 05 14 29 59")) {print $0 }} function c(s){return(sprintf("%02d\n",(match("JanFebMarAprMayJunJulAugSepOctNovDec",$1)+2)/3)) }' filename 

Выбранное время / даты указано в формате ГГГ ММ ДД ЧЧ ММ СС. Вы также заметите, что год жестко закодирован, поскольку ваши журналы не содержат год – я предположил, что в этом году.

Вышеуказанный однострочный, но лучше отформатированный и с комментариями:

 #!/usr/bin/awk -f BEGIN { # Split line into fields using colon or spaces FS=":| +" } { # Generate the timestamp of the current line from the first 5 fields. # Use the function c(), defined below, to convert 3 letter months to numerical current = mktime("2014 "c($1)" "$2" "$3" "$4" "$5); # If the timestamp of the current line is between two specified # timestamps then print the whole line if (current >= mktime ("2014 12 08 15 0 0") && current <= mktime("2014 12 08 16 05 00")) {print $0 } } function c(s) { # Function to convert three letter month to numerical # If s == Jan then returns 1. If s == Aug, returns 8 return(sprintf("%02d\n",(match("JanFebMarAprMayJunJulAugSepOctNovDec",$1)+2)/3)) } 

Одно решение, конвертирующее дату в эпоху:

 while read month dm hour rest; do d=$(date -d"$month $dm $hour" "+%m%d%H%M%S") echo "$d $rest" done < file | awk '$1 < 1204143737' # print all lines before this date 
  • Анализ HTTP-ответа с помощью оболочки
  • Grep во многих каталогах, но смотрите только в каждом каталоге подкаталогов, но не во всех поддиректориях
  • Подсчитайте количество строк, найденных grep
  • grep с большим количеством файлов, который содержит много строк?
  • Использование фильтра grep
  • Могу ли я использовать Find и Grep в одной строке
  • Поиск строки в файлах в текущем каталоге, опустить дубликаты
  • Grep: Зачем нужны модификаторы?
  • Отфильтровать вывод команды по цвету
  • Regex to grep filler, за которым следует подписанный float
  • Требуется, чтобы grep значение BINARY.ear md5sum в файле md5sum.txt
  • Interesting Posts

    Влияние записей в файле / etc / securetty

    новый компилятор ядра – ошибка при загрузке – Не удалось найти оверлей

    Установка принтера Epson Stylus SX115 на Archlinux

    Как выбрать пакет макросов groff?

    временная метка вновь созданного файла в будущем

    Debian – Вне диапазона после установки

    Как наложить аудиофайл на один файл изображения для видеоизображения, оптимизированного на YouTube, из командной строки?

    Как преобразовать текстовое содержимое в буфер в список местоположений в vim?

    Есть ли дистрибутив, который поддерживает откатывание обновленных пакетов?

    Как назвать объем в Linux, чтобы я мог распознавать каждый том в файловой системе?

    Резервное копирование и синхронизация

    Как отключить эмуляцию правой кнопки мыши Xorg во время выполнения

    Как заменить все первые вхождения в совпадающие строки с инкрементным числом?

    Беспроводной индикатор / светодиодный Linux Mint

    Выполнение непрерывных заданий удаленно

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