Используя grep/sed/awk для классификации записей файла журнала

Самый легкий путь состоит в том, чтобы использовать atool: http://www.nongnu.org/atool/ Это - очень хороший сценарий, которые используют zip, разархивировали, смолят, rar и т.д. программы для извлечения любого архива.

Использовать atool -x package_name.zip разархивировать их всех или если Вы хотите использовать его в каталоге со многим простым использованием zip-файлов for цикл:

for f in *; do atool -x $f; fi (Вы будете иметь к cd в желаемый каталог с zip-файлами перед использованием этого).

4
21.02.2011, 22:40
2 ответа

Если я понимаю правильно, у Вас есть набор шаблонов, и Вы хотите извлечь одно соответствие на шаблон. Следующий awk сценарий должен добиться цели. Это печатает первое вхождение данного шаблона и записи, что шаблон был замечен, чтобы не распечатать последующие случаи.

awk '
/^2011-02-21.*MyKeyword.*Error/ {
    if (!seen["^2011-02-21.*MyKeyword.*Error"]++) print;
    next;
}
1 {if (!seen[""]++) print}  # also print the first line that matches no pattern
'

Вот вариант, который сохраняет тот MyKeyword.*Error строка в день.

awk '
/^[0-9]{4}-[0-9]{2}-[0-9]{2}.*MyKeyword.*Error/ {
    if (!seen[substr($0,10) "MyKeyword.*Error"]++) print;
    next;
}
'
2
27.01.2020, 20:59
  • 1
    Спасибо Gilles, это вполне близко к тому, в чем я нуждаюсь, однако я забыл упоминать в своем исходном сообщении (переиздал его теперь), что я также должен определить НЕИЗВЕСТНЫЕ шаблоны тем же способом (одна строка на шаблон). Это, вероятно, включало бы некоторую более тяжелую основанную на сценарии обработку, я воображаю? –  Jas 21.02.2011, 22:42
  • 2
    @Jas: Посмотрите мое редактирование. Если Вы хотите распечатать все неизвестные строки, использовать 1 {print}. Обратите внимание, что обработчик по умолчанию должен быть последним. next ключевое слово заставляет все последующие обработчики быть пропущенными. –  Gilles 'SO- stop being evil' 21.02.2011, 22:47
[114656] Не ясно, пытаетесь ли вы сгруппировать линии по [115017] неизвестным выходным образцам [115018] или [115019] неизвестным ключевым словам в известных образцах [115020]. В первом случае, если у вас есть такие журналы, как:

, то вы можете использовать [115021]tr[115022] и [115023] сортировку [115024] и/или [115025]uniq[115026] для изучения шаблонов:

или, если вы хотите посчитать вхождения:

Но если шаблон всегда один и тот же, например, [115027] MyKeyword[115028] всегда находится в одном и том же месте (например, [115029][2010-04-02 12:00:00] Ошибка: BaseController Что-то пошло не так[115030]), но вы хотите выяснить, какие строки могут быть в этой позиции, вы просто:

Interval Since Last Panic Report:  472 sec
Panics Since Last Report:          2
Anonymous UUID:                    D89B5624-FF95-48B5-8F55-0987EA2D2466

Sun Jun 26 18:02:46 2011
panic(cpu 0 caller 0x6e085e4a): "ntfs_map_runlist_nolock(): Called for $MFT/$DATA!\n"@/SourceCache/ntfs/ntfs-65.5/kext/ntfs_attr.c:245
Backtrace (CPU 0), Frame : Return Address (4 potential args on stack)
 ...
  Kernel Extensions in backtrace (with dependencies):
     com.apple.filesystems.ntfs(3.4)@0x6e05a000->0x6e0b9fff

BSD process name corresponding to current thread: mount_ntfs

, что должно дать вам что-то вроде

1
27.01.2020, 20:59

Теги

Похожие вопросы