- 论坛徽章:
- 145
|
回复 2# bikkuri
How about this way ...
$ awk -f get_task.awk FILE
WARNING: TASK - Database Manager [Full Backup] has taken 6.23 minutes
INFO: TASK - Network Element R108 10.0.0.8 R105 10.0.0.103 [Multi Resync All MIBs] has taken 0.11 minutes
$ cat get_task.awk
BEGIN{
FS = "[<>]+"
t=split("INFO 5 WARNING 10 MAJOR 30 CRITICAL",a," ");
for(n=1;n<=t/2;++n){
c=n*2
aNum[n] = a[c]
aMsg[n] = a[c-1]
}
aMsg[n] = a[t]
sMsg = n
}
function show(n, c,t){
msg = ""
# for minutes
t = (E[now] - E[n])/60000
for(c=1;c < sMsg; ++c){
if(t < aNum[c]){
msg = aMsg[c]
break
}
}
if(msg == "") msg = aMsg[c]
printf("%*s TASK - %s has taken %.2f minutes\n",-10,msg":",N[n],t)
}
{
c=0;
for(n=1;n<=NF;++n){
if($n=="taskName"){
N[++c]=$(n+1);
#print "c="c,N[c]
if($(n+1)~/taskmgmt.TaskTracker/)
now=c;
continue;
}
if($n=="status"){
S[c]=$(n+1);
continue;
}
if($n=="startTime"){
E[c] = $(n+1);
}
}
}
END{
for(n=1;n<=c;++n){
#print "n=",n,N[n],S[n],E[n]
if(S[n]=="inProgress" && n!=now)
show(n);
}
}
|
|