В настоящее время имею дело с файлами журналов размером прибл. 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? Но я не уверен, как устроена эта структура.
Заранее спасибо за помощь. Ура.