shell-日志文件分析实战
# 统计每位测试人员执行用例的总数
[root@aliyun ~]$ cat case.log
2019-08-14 12:20:58 INFO 小花 Pass 手机号
2019-08-14 12:20:57 INFO 小花 Pass 邮箱
2019-08-14 12:20:51 ERROR 小刚 Pass 手机号
2019-08-14 12:20:58 ERROR 小刚 Pass 手机号
2019-08-14 12:20:19 ERROR 小花 Pass 手机号
2019-08-14 12:20:58 ERROR 小花 Pass 手机号
2019-08-14 12:20:16 ERROR 小花 Pass 手机号
2019-08-14 12:20:58 INFO 小花 Pass 邮箱
2019-08-14 12:20:46 INFO 小花 Pass 邮箱
2019-08-14 12:20:58 ERROR 小红 Pass 邮箱
2019-08-14 12:20:45 INFO 小红 Pass 邮箱
2019-08-14 12:20:18 CRITICAL 小华 Pass 邮箱
2019-08-14 12:20:58 INFO 小红 Pass 手机号
2019-08-14 12:20:48 INFO 小花 Pass 手机号
2019-08-14 12:20:38 INFO 小花 Pass 手机号
2019-08-14 12:20:54 ERROR 小花 Pass 邮箱
2019-08-14 12:20:36 ERROR 小花 Pass 邮箱
2019-08-14 12:20:28 ERROR 小刚 Pass 邮箱
2019-08-14 12:20:58 ERROR 小刚 Pass 邮箱
2019-08-14 12:20:21 INFO 小刚 Pass 手机号
[root@aliyun ~]$ cat count_testers_cases.awk
BEGIN{
printf "%-10s%-10s\n", "tester", "cases"
}
{
# 声明一个数组,读取文件每1行的第4列,如果遇到重复的key,对应的value就累加1
USERS[$4]++
}
END{
for (user in USERS)
printf "%-10s%-10d\n", user, USERS[user]
}
[root@aliyun ~]$ awk -f count_testers_cases.awk case.log
tester cases
小红 3
小花 11
小刚 5
小华 1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# 统计每位tester执行用例成功和失败的总数
[root@aliyun ~]$ cat case.log
2019-08-14 12:20:58 INFO 小花 Pass 手机号
2019-08-14 12:20:57 INFO 小花 Fail 邮箱
2019-08-14 12:20:51 ERROR 小刚 Pass 手机号
2019-08-14 12:20:58 ERROR 小刚 Pass 手机号
2019-08-14 12:20:19 ERROR 小花 Fail 手机号
2019-08-14 12:20:58 ERROR 小花 Pass 手机号
2019-08-14 12:20:16 ERROR 小花 Fail 手机号
2019-08-14 12:20:58 INFO 小花 Pass 邮箱
2019-08-14 12:20:46 INFO 小花 Pass 邮箱
2019-08-14 12:20:58 ERROR 小红 Fail 邮箱
2019-08-14 12:20:45 INFO 小红 Fail 邮箱
2019-08-14 12:20:18 CRITICAL 小华 Pass 邮箱
2019-08-14 12:20:58 INFO 小红 Fail 手机号
2019-08-14 12:20:48 INFO 小花 Fail 手机号
2019-08-14 12:20:38 INFO 小花 Pass 手机号
2019-08-14 12:20:54 ERROR 小花 Pass 邮箱
2019-08-14 12:20:36 ERROR 小花 Fail 邮箱
2019-08-14 12:20:28 ERROR 小刚 Pass 邮箱
2019-08-14 12:20:58 ERROR 小刚 Fail 邮箱
2019-08-14 12:20:21 INFO 小刚 Pass 手机号%
[root@aliyun ~]$ cat count_testers_pass_fail_cases.awk
BEGIN{
printf "%-15s%-15s%-15s\n", "tester", "PassCasesTotal", "FailCasesTotal"
}
{
if ($5 == "Pass")
{
SUCCESS_CASES[$4]++
}else if ($5 == "Fail")
{
FAIL_CASES[$4]++
}
USERS[$4]++
}
END{
for (user in USERS)
printf "%-15s%-15d%-15d\n", user, SUCCESS_CASES[user], FAIL_CASES[user]
}%
[root@aliyun ~]$ awk -f count_testers_pass_fail_cases.awk case.log
tester PassCasesTotal FailCasesTotal
小红 0 3
小花 6 5
小刚 4 1
小华 1 0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# 将前2个需求合并,同时分别统计每位tester执行用例INFO、ERROR日志等级数以及所有tester每项总数
[root@aliyun ~]$ cat case.log
2019-08-14 12:20:58 INFO 小花 Pass 手机号
2019-08-14 12:20:57 INFO 小花 Fail 邮箱
2019-08-14 12:20:51 ERROR 小刚 Pass 手机号
2019-08-14 12:20:58 ERROR 小刚 Pass 手机号
2019-08-14 12:20:19 ERROR 小花 Fail 手机号
2019-08-14 12:20:58 ERROR 小花 Pass 手机号
2019-08-14 12:20:16 ERROR 小花 Fail 手机号
2019-08-14 12:20:58 INFO 小花 Pass 邮箱
2019-08-14 12:20:46 INFO 小花 Pass 邮箱
2019-08-14 12:20:58 ERROR 小红 Fail 邮箱
2019-08-14 12:20:45 INFO 小红 Fail 邮箱
2019-08-14 12:20:18 ERROR 小华 Pass 邮箱
2019-08-14 12:20:58 INFO 小红 Fail 手机号
2019-08-14 12:20:48 INFO 小花 Fail 手机号
2019-08-14 12:20:38 INFO 小花 Pass 手机号
2019-08-14 12:20:54 ERROR 小花 Pass 邮箱
2019-08-14 12:20:36 ERROR 小花 Fail 邮箱
2019-08-14 12:20:28 ERROR 小刚 Pass 邮箱
2019-08-14 12:20:58 ERROR 小刚 Fail 邮箱
2019-08-14 12:20:21 INFO 小刚 Pass 手机号%
[root@aliyun ~]$ cat count_testers_cases_all.awk
BEGIN{
printf "%-15s%-15s%-15s%-15s%-15s\n", "Tester", "InfoTotal", "ErrorTotal", """PassCasesTotal", "FailCasesTotal"
}
{
if ($5 == "Pass")
{
SUCCESS_CASES[$4]++
}else if ($5 == "Fail")
{
FAIL_CASES[$4]++
}
if ($3 == "INFO")
{
INFO[$4]++
}else if ($3 == "ERROR")
{
ERROR[$4]++
}
USERS[$4]++
}
END{
for (user in USERS)
# for循环中,如果有多条表达式,需要加大括号
{
ALL_INFO+=INFO[user]
ALL_ERROR+=ERROR[user]
ALL_SUCCESS_CASES+=SUCCESS_CASES[user]
ALL_FAIL_CASES+=FAIL_CASES[user]
printf "%-15s%-15d%-15d%-15d%-15d\n", user, INFO[user], ERROR[user], SUCCESS_CASES[user], FAIL_CASES[user]
}
printf "%-15s%-15d%-15d%-15d%-15d\n", "Total", ALL_INFO, ALL_ERROR, ALL_SUCCESS_CASES, ALL_FAIL_CASES
}%
[root@aliyun ~]$ awk -f count_testers_cases_all.awk case.log
Tester InfoTotal ErrorTotal PassCasesTotal FailCasesTotal
小红 2 1 0 3
小花 6 5 6 5
小刚 1 4 4 1
小华 0 1 1 0
Total 9 11 11 9
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
编辑 (opens new window)
上次更新: 2023/01/04, 02:34:17
- 01
- Python实现对字符串的加解密02-25
- 02
- Python3对大文件中指定字符进行排序再写入到新的文件10-24
- 03
- Ubuntu下配置adb环境连接Android设备进行调试08-17