내 파일 중 일부를 검사하는 C++ 실행 파일이 있고 해당 파일에 일부 사용자 ID가 있습니다. 스캔이 완료되면 (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
이제 위의 로그를 grep하여 스캔된 파일 수, 실패한 사용자 ID 수, 손상된 파일 수를 알아내야 합니다.
- 스캔한 파일 수를 확인하려면 각 줄에서 단어를 찾아야 하며
checking file
그에 따라 스캔한 파일 수가 늘어납니다. - 실패한 고유 사용자 ID 수에 대해
failed reading user id
연속해서 단어를 찾아 이를 기반으로 개수를 늘린 다음 실패한 사용자 ID 목록을 제공해야 합니다. - 사용자 ID가 실패하면 해당 사용자 ID를 보유한 파일이 손상되었음을 의미하므로
is corrupt
각 줄에서 단어를 찾아 손상된 파일 이름을 찾아야 합니다. 일반적으로 파일이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으로 로그를 스캔한 후 위의 결과를 계속 얻으려면 어떻게 해야 합니까?
답변1
다음 스크립트를 시도해 보세요.
#!/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
역방향 주장입니다(전체 패턴을 취하지만 결과에서 지금까지의 모든 것을 버립니다).
나머지는 분명해야합니다. 하지만 파일 이름에 공백이 없다고 가정한다는 점에 유의하세요!