Intereting Posts
Почему каждая программа или служба имеет собственную учетную запись в / etc / passwd? Блокировка iptables с интернет-стороны на eth1? В чем разница между встроенной командой и тем, что нет? Можно ли покрасить вывод `aafire`? Как переместить процесс из одного пространства имен в другое? Сброс пароля root в CentOS 7 Случайный выбор файлов в файловой системе Маршрутизация сетевого интерфейса при использовании VPN Есть ли какая-либо документация о пользовательском меню в полночь-командир? Почему некоторые операции обработки событий в операционной системе записываются в asm вместо c? fail2ban log parsing слишком медленный на малины Pi – варианты? «Конечная точка транспортного средства не подключена» после нескольких операций? Нет сетевого интерфейса для lan9118, эмулируемого на QEMU 1.4.0 overo machine Как повторно использовать физическую память в отсутствие замены? Несколько записей tmpfs в fstab

Как сгладить журналы для списка шаблонов и сделать из него отчет?

У меня есть исполняемый файл C ++, который сканирует некоторые из моих файлов, и эти файлы имеют в нем некоторый идентификатор пользователя. После завершения сканирования он генерирует ниже файл журнала (abc.log) например:

 INFO [0x7faff2b32a00] (/home/david/abc/golden/mmap/mapper_check/mapper_check.cc:110) - checking file: "p1_weekly_1980_32_200003_5.data" with path: "/database/batch/p1_snapshot/p1_weekly_1980_32_200003_5.data" WARN [0x7faff2b32a00] (/home/david/abc/golden/mmap/KKLFileMgr.cc:389) - Failed to upsert attribute for uuid 45576752 with value badge_leaf_cat and status -2 WARN [0x7faff2b32a00] (/home/david/abc/golden/mmap/KKLFileMgr.cc:389) - Failed to upsert attribute for uuid 870206432 with value badge_leaf_cat and status -2 INFO [0x7faff2b32a00] (/home/david/abc/golden/mmap/mapper_check/mapper_check.cc:120) - golden_file: /database/batch/p1_snapshot//p1_weekly_1980_32_200003_5.data is valid INFO [0x7faff2b32a00] (/home/david/abc/golden/mmap/mapper_check/mapper_check.cc:110) - checking file: "p1_weekly_1980_13_200003_5.data" with path: "/database/batch/p1_snapshot/p1_weekly_1980_13_200003_5.data" WARN [0x7faff2b32a00] (/home/david/abc/golden/mmap/KKLFileMgr.cc:389) - Failed to upsert attribute for uuid 876269533 with value badge_leaf_cat and status -2 WARN [0x7faff2b32a00] (/home/david/abc/golden/mmap/KKLFileMgr.cc:389) - Failed to upsert attribute for uuid 17256973 with value badge_leaf_cat and status -2 WARN [0x7faff2b32a00] (/home/david/abc/golden/mmap/KKLFileMgr.cc:389) - Failed to upsert attribute for uuid 830173693 with value badge_leaf_cat and status -2 INFO [0x7faff2b32a00] (/home/david/abc/golden/mmap/mapper_check/mapper_check.cc:120) - golden_file: /database/batch/p1_snapshot//p1_weekly_1980_13_200003_5.data is valid INFO [0x7faff2b32a00] (/home/david/abc/golden/mmap/mapper_check/mapper_check.cc:110) - checking file: "p1_weekly_1980_0_200003_5.data" with path: "/database/batch/p1_snapshot/p1_weekly_1980_0_200003_5.data" ERROR [0x7faff2b32a00] (/home/david/abc/golden/mmap/KKLFileMgrUtil.cc:493) - failed reading user id: 18446744073135142816 num attributes: 0 seeing 1 bad records from 365 records ERROR [0x7faff2b32a00] (/home/david/abc/golden/mmap/KKLFileMgrUtil.cc:493) - failed reading user id: 18446744073698151136 num attributes: 0 seeing 2 bad records from 595 records ERROR [0x7faff2b32a00] (/home/david/abc/golden/mmap/KKLFileMgrUtil.cc:493) - failed reading user id: 18446744072929739296 num attributes: 0 seeing 3 bad records from 1214 records ERROR [0x7faff2b32a00] (/home/david/abc/golden/mmap/mapper_check/mapper_check.cc:117) - golden_file: /database/batch/p1_snapshot//p1_weekly_1980_0_200003_5.data is corrupt 

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

  • Для того, сколько файлов он отсканировал, мне нужно искать checking file в каждой строке и на основе увеличения количества для сканирования файлов.
  • Для того, сколько уникальных идентификаторов пользователя не удалось, мне нужно искать failed reading user id слов failed reading user id в строке и на основе увеличения счетчика, а затем предоставить список неудачных идентификаторов пользователя.
  • Если какой-либо идентификатор пользователя не удался, значит, файл будет поврежден, который будет содержать этот идентификатор пользователя, поэтому мне нужно искать is corrupt слово в каждой строке и найти имя файла, который поврежден. В общем случае эта database/batch/p1_snapshot//p1_weekly_1980_0_200003_5.data файлов database/batch/p1_snapshot//p1_weekly_1980_0_200003_5.data повреждена.

И ниже – ответ, который я хотел увидеть после сканирования вышеуказанных журналов –

 Total Number of Files Scanned - 1000 Total Number of Unique User ID failed - 10000 Total Number of Files Corrupted - 5 List of Unique User Id's which are corrupt - UserId-A UserId-B Files which are corrupted - FileName-A FileName-B 

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

Попробуйте следующий скрипт:

 #!/bin/bash logfile="$1" nfiles=$(grep -c 'checking file' "$logfile") failed_userid=($(grep -oP 'failed reading user id: \K[^ ]*' "$logfile")) corrupted_files=($(grep -oP '[^ ]*(?= is corrupt)' "$logfile")) echo "Total Number of Files Scanned - $nfiles" echo "Total Number of Unique User ID failed - ${#failed_userid[@]}" echo "Total Number of Files Corrupted - ${#corrupted_files[@]}" echo echo "List of Unique User Id's which are corrupt - " for uid in "${failed_userid[@]}"; do echo "$uid" done echo echo "Files which are corrupted - " for corf in "${corrupted_files[@]}"; do echo "$corf" done 

Запустите его с помощью

 $ ./script file.log 

Результат ввода вашего вопроса выглядит так:

 Total Number of Files Scanned - 3 Total Number of Unique User ID failed - 3 Total Number of Files Corrupted - 1 List of Unique User Id's which are corrupt - 18446744073135142816 18446744073698151136 18446744072929739296 Files which are corrupted - /database/batch/p1_snapshot//p1_weekly_1980_0_200003_5.data 

Краткое объяснение:

  • -c опция grep подсчитывает совпадающие строки
  • -P допускает синтаксис регулярных выражений perl
  • -o соответствует только части строк
  • (?= конструкция – это так называемый позитивный прогноз вперед (воспринимайте его как шаблон, но не включайте в вывод)
  • \K – это утверждение взгляда (возьмите целую картину, но отбросьте от результата все до этой точки)

Остальное должно быть очевидно. Имейте в виду, однако, что я предположил, что в именах файлов нет пробелов!