Проблема с производительностью при разборе больших файлов журнала (~ 5 ГБ) с использованием awk, grep, sed

В настоящее время имею дело с файлами журналов размером прибл. 5 гб. Я новичок в синтаксическом анализе файлов журналов и использовании UNIX bash, поэтому постараюсь быть максимально точным. При поиске в файлах журнала я делаю следующее: предоставляю номер запроса, который нужно искать, а затем, при необходимости, указываю действие в качестве вторичного фильтра. Типичная команда выглядит так:

fgrep '2064351200' example.log | fgrep 'action: example'

Это нормально для файлов меньшего размера, но с файлом журнала размером 5 ГБ это невыносимо медленно. Я читал в Интернете, как здорово использовать sed или awk для повышения производительности (или, возможно, даже их комбинацию), но я не уверен, как это достигается. Например, используя awk, у меня есть типичная команда:

awk '/2064351200/ {print}' example.log

По сути, моя конечная цель - иметь возможность печатать / возвращать записи (или номер строки), содержащие строки (может быть до 4-5, и я канал чтения плохой) для эффективного сопоставления в файле журнала.

Кстати, в оболочке bash, если я хочу использовать awk и выполнить некоторую обработку,как это достигается? Например:

BEGIN { print "File\tOwner" }
{ print $8, "\t", \
$3}
END { print " - DONE -" }

Это довольно простой скрипт awk, и я предполагаю, что есть способ поместить его в однострочную команду bash? Но я не уверен, как устроена эта структура.

Заранее спасибо за помощь. Ура.

9
задан Albert 25 August 2011 в 21:34
поделиться