Intereting Posts
быстрый фильтр IP, вызывающий DOS для sendmail под FreeBSD Как настроить собственный EDID вручную? Заменить 1-й с 1), 2-й с 2), … в GNU Sed Как написать сценарий оболочки для запуска нескольких команд в разных сеансах экрана? Изменение настроек глобальной веб-камеры с терминала Запуск сервера для выключения при получении сигнала через последовательный порт (RS232) Попытка понять, как TTY и PTY работают в CentOS 6.5? Прошивка ethernet "Tigon": сообщение об ошибке, хотя работает Используя expr, $ (()), (()) Как узнать прошивку NIC в Solaris 11.3? systemd: не удалось создать coredump в файловой системе только для чтения Почему эта операция переименования не работает? df -h показывает только половину дискового пространства, которое, как я думал, у меня было? Могут ли команды tr быть закодированы, чтобы избежать нескольких tr процессов в конвейере? Преобразование между форматами нормализации Unicode в командной строке unix

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

У меня есть исполняемый файл 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 – это утверждение взгляда (возьмите целую картину, но отбросьте от результата все до этой точки)

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