两年前用于工作需要我用gawk写的解析系统日志的代码,贴出来留着方便回忆gawk语法。
1
#!/usr/bin/gawk
2
3
BEGIN {
4
RS="+++"
5
ast=0; as = 0 ; s = 0; al = 0; au = 0
6
print "parsering
."
7
# system("./check_core &")
8
system("rm -f tmp/* && touch tmp/rolling_list && touch tmp/error_list && touch tmp/mem_list && touch tmp/cpu_list && touch tmp/alarm_list && touch tmp/audit_list && touch tmp/assert_list && touch tmp/segv_list && touch tmp/core_list")
9
# now=strftime("%D",systime())
10
# print now
11
}
12
13
############ assert #############
14
$0 ~ /ASSERT/ && $0~/Function Trace:/ {
15
ast++
16
num=split($0,a,"\n")
17
printf("+++")>>"tmp/assert_detail"
18
for(k=1;k<num;k++){
19
printf("%s\n",a[k])>>"tmp/assert_detail"
20
}
21
22
i=1
23
while($i != "Assert:" && i<30) {
24
i++
25
}
26
27
if($i=="Assert:" ) {
28
k=i
29
j=i+1
30
while(k<40 && $k !~ /Event=/) {
31
k++
32
}
33
list=""
34
if($k ~ /Event=/) {
35
for(;j<k-1;j++) {
36
list=list $j "_"
37
}
38
list=list $(k-1)
39
while($k !~/\[/ && k<50 ) { k++ }
40
41
if($k~/\[/){
42
leng=length($k)
43
level=substr($k,2,leng-2)
44
assert=sprintf("%s %s",list,level)
45
close("tmp/assert_list")
46
#print list
47
system("grep \"" assert "\" tmp/assert_list | wc -l > tmp/.num" )
48
close("tmp/.num")
49
getline ret1 < "tmp/.num"
50
close("tmp/.num")
51
# printf("ret1=%d\n",ret1)
52
if(ret1==0)
53
{
54
assert= assert " 1"
55
}
56
else if(ret1==1) {
57
# printf("ret1=%d\n",ret1)
58
close("tmp/assert_list")
59
#system("grep \"" assert "\" tmp/assert_list | awk '{print $4 > \"tmp/.num2\" }'")
60
system("grep \"" assert "\" tmp/assert_list | cut -d ' ' -f 3 > tmp/.num2" )
61
close("tmp/.num2")
62
getline numb2 <"tmp/.num2"
63
close("tmp/.num2")
64
numb2++
65
# printf("numb2=%d\n",numb2)
66
system("sed -e '/" assert "/d' tmp/assert_list > tmp/assert_list0 && mv tmp/assert_list0 tmp/assert_list")
67
assert = assert " " numb2
68
}
69
system("cat /dev/null > tmp/.num")
70
system("cat /dev/null > tmp/.num2")
71
numb2=0
72
#assert= assert " " $1 " " $2
73
###########################################################################################################
74
#n=128-length(assert)
75
#for(l=0;l<n;l++){
76
# assert = assert " "
77
#}
78
printf("%s\n",assert) >> "tmp/assert_list"
79
printf("assert: %s\n",assert)
80
assert=""
81
}
82
}
83
list=""
84
}
85
# close("tmp/assert_list")
86
next
87
}
88
89
######## audit ##########
90
($0 ~ /AUDIT/) {
91
as++
92
i=1
93
while($i != "AUDREPT" && i<30) {
94
i++
95
}
96
97
if($i=="AUDREPT") {
98
split($(i+2),err,"=")
99
error=err[2]
100
audit =sprintf("%s %s",$(i+1),error)
101
system("grep " $(i+1) " tmp/audit_list | grep " error " | wc -l > tmp/.num" )
102
close("tmp/.num")
103
getline ret2 < "tmp/.num"
104
close("tmp/.num")
105
#printf("ret2=%d\n",ret2)
106
if(ret2==0)
107
{
108
audit = audit " 1"
109
}
110
else if(ret2==1) {
111
# printf("ret2=%d\n",ret2)
112
close("tmp/audit_list")
113
# system("grep " $(i+1) " tmp/audit_list | grep " error "| wc -l > tmp/.num2" )
114
system("grep \"" $(i+1) "\" tmp/audit_list | grep " error " | cut -d ' ' -f 3 > tmp/.num2" )
115
close("tmp/.num2")
116
getline numb3 <"tmp/.num2"
117
close("tmp/.num2")
118
numb3++
119
# printf("numb3=%d\n",numb3)
120
system("sed -e '/" audit "/d' tmp/audit_list > tmp/audit_list0 && mv tmp/audit_list0 tmp/audit_list")
121
audit = audit " " numb3
122
}
123
system("cat /dev/null > tmp/.num")
124
system("cat /dev/null > tmp/.num2")
125
numb3=0
126
###########################################################################################################
127
#audit = audit " " $1 " " $2
128
#num2=128-length(audit)
129
#for(j=0;j<num2;j++){
130
# audit = audit " "
131
#}
132
printf("%s\n",audit ) >>"tmp/audit_list"
133
printf("audit: %s\n",audit)
134
# close("tmp/audit_list")
135
next
136
}
137
}
138
139
########### ALARM ###########
140
($0 ~ /ALARM/) {
141
al++
142
num=split($0,a,"\n")
143
printf("+++")>>"tmp/alarm_detail"
144
for(k=1;k<num-1;k++){
145
printf("%s\n",a[k])>>"tmp/alarm_detail"
146
}
147
if(a[num-1] ~ "Additional") {
148
print a[num-1] >>"tmp/alarm_detail"
149
150
}
151
152
i=1
153
while($i != "Severity") {
154
i++
155
}
156
157
if($i=="Severity" && $(i+2)!="info" && $(i+2)!="cleared" ) {
158
k=i
159
name=""
160
resource=""
161
while($k!="Name" && k-i<10){k++}
162
if($k=="Name" &&$(k+1)==":"){
163
name=$(k+2)
164
t=k
165
while($t!="Resource" && t-k<10){t++}
166
if($t=="Resource"){
167
resource=$(t+2)
168
}
169
170
split(resource,res,":")
171
split(res[1],resour,"=")
172
resource=resour[2]
173
alist=sprintf("%s %s %s",name,resource,$(i+2))
174
system("grep " name " tmp/alarm_list | grep " resource " | grep " $(i+2) " |wc -l > tmp/.num" )
175
close("tmp/.num")
176
getline ret < "tmp/.num"
177
close("tmp/.num")
178
#printf("ret=%d\n",ret)
179
#system("cat /dev/null > tmp/.num")
180
if(ret==0 || ret=="0")
181
{
182
alist=alist " 1"
183
# printf("alist=%s\n",alist)
184
}
185
else if(ret==1) {
186
close("tmp/alarm_list")
187
system("grep " name " tmp/alarm_list | grep " resource " | grep " $(i+2) " | awk '{print $4 > \"tmp/.num2\"}'" )
188
close("tmp/.num2")
189
getline numb <"tmp/.num2"
190
close("tmp/.num2")
191
numb++
192
system("sed -e '/" alist "/d' tmp/alarm_list > tmp/alarm_list0 && mv tmp/alarm_list0 tmp/alarm_list")
193
alist=alist " " numb
194
}
195
# alist=alist " " $1 " " $2
196
# n=128-length(alist)
197
# for(l=0;l<n;l++){
198
# alist = alist " "
199
# }
200
printf("%s\n",alist) >> "tmp/alarm_list"
201
printf("alarm: %s\n",alist)
202
system("cat /dev/null > tmp/.num")
203
system("cat /dev/null > tmp/.num2")
204
alist=""
205
numb=0
206
}
207
}
208
# close("tmp/alarm_list")
209
next
210
}
211
212
213
######## segv #########
214
($0 ~ /EXCEPTION/) {
215
i=1
216
while($i != "Task" && i<50) {
217
i++
218
}
219
220
if($i=="Task") {
221
system("grep " $(i+1) " tmp/segv_list | wc -l > tmp/.num" )
222
close("tmp/.num")
223
getline ret2 < "tmp/.num"
224
close("tmp/.num")
225
if(ret2==0)
226
{
227
segv = segv " 1"
228
}
229
else if(ret2==1) {
230
close("tmp/segv_list")
231
#system("grep " $(i+1) " tmp/segv_list | wc -l > tmp/.num2" )
232
system("grep \"" $(i+1) "\" tmp/segv_list | cut -d ' ' -f 3 > tmp/.num2" )
233
close("tmp/.num2")
234
getline numb3 <"tmp/.num2"
235
close("tmp/.num2")
236
numb3++
237
system("sed -e '/" segv "/d' tmp/segv_list > tmp/segv_list0 && mv tmp/segv_list0 tmp/segv_list")
238
segv = segv " " numb3
239
}
240
system("cat /dev/null > tmp/.num")
241
system("cat /dev/null > tmp/.num2")
242
numb3=0
243
printf("%s\n",segv ) >>"tmp/segv_list"
244
printf("segv: %s\n",segv)
245
next
246
}
247
}
248
249
250
##########################################################################################################
251
($4 ~ /HIGH/ && ($6 ~ /ngss/ || $6 ~ /h248ds/ || $6 ~ /fs5000/ || $6 ~/ss7/)) {
252
253
if($11 ~ "A-" || $11 ~ "C-") {
254
num=split($6,a,":")
255
app=a[1]
256
nu=split($11,b,":")
257
num=split(b[1],c,"-")
258
shelf= "s0" c[2]
259
if (b[2] < 10)
260
card= "c0" b[2]
261
else
262
card= "c" b[2]
263
host= "h" b[3]
264
machine=shelf card host
265
if (app=="ngss")
266
app= "NGSS"
267
else if (app=="fs5000")
268
app= "CTS"
269
else if (app=="h248ds")
270
app= "H248DS"
271
else if (app=="ss7")
272
app="SS7"
273
rolling=sprintf("%s %s",app,machine)
274
close("tmp/.num")
275
system("grep " machine " tmp/rolling_list | grep " app " tmp/rolling_list | wc -l > tmp/.num" )
276
close("tmp/.num")
277
getline high_ret < "tmp/.num"
278
close("tmp/.num")
279
if(high_ret==0)
280
{
281
rolling = rolling " 1"
282
}
283
else {
284
close("tmp/rolling_list")
285
system("grep " machine " tmp/rolling_list | grep " app " tmp/rolling_list | cut -d ' ' -f 3 > tmp/.num2" )
286
close("tmp/.num2")
287
numb=0
288
getline numb <"tmp/.num2"
289
close("tmp/.num2")
290
numb++
291
system("sed -e '/" rolling "/d' tmp/rolling_list > tmp/rolling_list0 && mv tmp/rolling_list0 tmp/rolling_list")
292
rolling = rolling " " numb
293
}
294
system("cat /dev/null > tmp/.num")
295
system("cat /dev/null > tmp/.num2")
296
numb=0
297
close("tmp/rolling_list")
298
printf("%s\n",rolling) >>"tmp/rolling_list"
299
system("sort tmp/rolling_list > rolling_list0 && mv rolling_list0 rolling_list")
300
printf("rolling: %s\n",rolling)
301
next
302
}
303
}
304
############################################################################################################
305
306
($0 ~ /error/ || $0 ~ /Error/ || $0 ~ /ERROR/ ) {
307
308
if($11 ~ "A-" || $11 ~ "C-") {
309
nu=split($11,b,":")
310
num=split(b[1],c,"-")
311
shelf= "s0" c[2]
312
if (b[2] < 10)
313
card= "c0" b[2]
314
else
315
card= "c" b[2]
316
host= "h" b[3]
317
machine=shelf card host
318
error=sprintf("Error %s",machine)
319
close("tmp/.num")
320
system("grep Error tmp/error_list | grep " machine " tmp/error_list | wc -l > tmp/.num" )
321
close("tmp/.num")
322
getline high_ret < "tmp/.num"
323
close("tmp/.num")
324
if(high_ret==0)
325
{
326
error = error " 1"
327
}
328
else {
329
close("tmp/error_list")
330
system("grep Error tmp/error_list | grep " machine " tmp/error_list | cut -d ' ' -f 3 > tmp/.num2" )
331
close("tmp/.num2")
332
numb=0
333
getline numb <"tmp/.num2"
334
close("tmp/.num2")
335
numb++
336
system("sed -e '/" error "/d' tmp/error_list > tmp/error_list0 && mv tmp/error_list0 tmp/error_list")
337
error = error " " numb
338
}
339
system("cat /dev/null > tmp/.num")
340
system("cat /dev/null > tmp/.num2")
341
numb=0
342
close("tmp/error_list")
343
printf("%s\n",error) >>"tmp/error_list"
344
system("sort tmp/error_list > error_list0 && mv error_list0 error_list")
345
printf("rolling: %s\n",error)
346
next
347
}
348
349
}
350
##########################################################################################################
351
($0 ~ /fail/ || $0 ~ /Fail/ || $0 ~ /FAIL/ ) {
352
353
if($11 ~ "A-" || $11 ~ "C-") {
354
nu=split($11,b,":")
355
num=split(b[1],c,"-")
356
shelf= "s0" c[2]
357
if (b[2] < 10)
358
card= "c0" b[2]
359
else
360
card= "c" b[2]
361
host= "h" b[3]
362
machine=shelf card host
363
error=sprintf("Fail %s",machine)
364
close("tmp/.num")
365
system("grep Fail tmp/error_list | grep " machine " tmp/error_list | wc -l > tmp/.num" )
366
close("tmp/.num")
367
getline high_ret < "tmp/.num"
368
close("tmp/.num")
369
if(high_ret==0)
370
{
371
error = error " 1"
372
}
373
else {
374
close("tmp/error_list")
375
system("grep Fail tmp/error_list | grep " machine " tmp/error_list | cut -d ' ' -f 3 > tmp/.num2" )
376
close("tmp/.num2")
377
numb=0
378
getline numb <"tmp/.num2"
379
close("tmp/.num2")
380
numb++
381
system("sed -e '/" error "/d' tmp/error_list > tmp/error_list0 && mv tmp/error_list0 tmp/error_list")
382
error = error " " numb
383
}
384
system("cat /dev/null > tmp/.num")
385
system("cat /dev/null > tmp/.num2")
386
numb=0
387
close("tmp/error_list")
388
printf("%s\n",error) >>"tmp/error_list"
389
system("sort tmp/error_list > error_list0 && mv error_list0 error_list")
390
printf("rolling: %s\n",error)
391
next
392
}
393
}
394
395
#########################################################################################################
396
($0 ~ /sw_rcvy/ || $0 ~ /SW_RCVY/ ) {
397
398
if($11 ~ "A-" || $11 ~ "C-") {
399
nu=split($11,b,":")
400
num=split(b[1],c,"-")
401
shelf= "s0" c[2]
402
if (b[2] < 10)
403
card= "c0" b[2]
404
else
405
card= "c" b[2]
406
host= "h" b[3]
407
machine=shelf card host
408
error=sprintf("SW_RCVY %s",machine)
409
close("tmp/.num")
410
system("grep SW_RCVY tmp/error_list | grep " machine " tmp/error_list | wc -l > tmp/.num" )
411
close("tmp/.num")
412
getline high_ret < "tmp/.num"
413
close("tmp/.num")
414
if(high_ret==0)
415
{
416
error = error " 1"
417
}
418
else {
419
close("tmp/error_list")
420
system("grep SW_RCVY tmp/error_list | grep " machine " tmp/error_list | cut -d ' ' -f 3 > tmp/.num2" )
421
close("tmp/.num2")
422
numb=0
423
getline numb <"tmp/.num2"
424
close("tmp/.num2")
425
numb++
426
system("sed -e '/" error "/d' tmp/error_list > tmp/error_list0 && mv tmp/error_list0 tmp/error_list")
427
error = error " " numb
428
}
429
system("cat /dev/null > tmp/.num")
430
system("cat /dev/null > tmp/.num2")
431
numb=0
432
close("tmp/error_list")
433
printf("%s\n",error) >>"tmp/error_list"
434
system("sort tmp/error_list > error_list0 && mv error_list0 error_list")
435
printf("rolling: %s\n",error)
436
next
437
}
438
439
}
440
441
###########################################################################################################
442
END {
443
# printf("%d\n",as)>>"tmp/assert_list";
444
close("assert_list")
445
close("assert_detail")
446
close("tmp/.num")
447
close("segv_list")
448
close("alarm_list")
449
close("alarm_detail")
450
close("audit_list")
451
close("rolling_list")
452
close("error_list")
453
close("core_list")
454
print "done!"
455
}
456