striping the text in AWK

hello,
what I have:

---

lots of text bla bla bla

PATCH MANAGEMENT AND SOFTWARE UPDATES - EXTERNAL
Risk Severity: High Area: External Network Relative Rating: Medium

lots of text bla bla bla

WIRELESS AP
Risk Severity: High Area: External Network Relative Rating: Poor

lots of text bla bla bla

IT DOCUMENTATION
Risk Severity: High Area: Administrative Relative Rating: High

lots of text bla bla bla

and so on and so on...
---
what I need to do is convert all "medium", "low" or "high" to numeric values for risk severity and calculate averages:

High - 5
Medium - 3
Low - 1

For relative rating:

Inadequate - 1
Poor - 2
Medium - 3
High - 4
Excellent - 5

there are 4 areas (internal, external, physical and administrative),

so at the end it should be grouped by areas and look like:
--
PATCH MANAGEMENT AND SOFTWARE UPDATES - EXTERNAL:Risk Severity:5:Area:External Network: Relative Rating:4
WIRELESS AP:Risk Severity:5:Area:External Network: Relative Rating:2

External Network Averages:Risk Severity:5:Relative Rating:3

IT DOCUMENTATION:Risk Severity:5:Area:Administrative:Relative Rating:4
..
..
..
Administrative Area Averages:Risk Severity:3.2:Relative Rating:3.6
---

So far what I have is:

#BEGIN {

# print "Title:Risk_Severity:Risk_Severity_Value:Area:Area_Value:Relative_Rating:Relative_Rating_Value"
#}

# selecting titles with ratings
/Risk Severity/ { for (i=(NR-1); i<NR; i++) { print b[i%3] }; print} { b[NR%3]=$0 }

#
# getline

# Replace the special character for a hypen with a hypen
# gsub("\226","-")
# title = $0

if (NR % 2 == 1) then
getline
title = $0
else
getline

split(....

---

May somebody guide me on what to do next, I installed awk yesterday :frowning:

Try and adapt the following awk program :

BEGIN {
   Severity["high"  ]   = 5;
   Severity["medium"]   = 3;
   Severity["low"   ]   = 1;

   Rating["inadequate"] = 1;
   Rating["poor"      ] = 2;
   Rating["medium"    ] = 3;
   Rating["high"      ] = 4;
   Rating["excellent" ] = 5;
}

/^Risk Severity:.*Relative Rating:/ {

   val = tolower($3);
   if (val in Severity)
      $2 = Severity[val]

   val = tolower($NF);
   if (val in Rating)
      $NF = Rating[val];
      
   area = $5;
   Areas[area] = Areas[area] prv_line ":Risk Severity:" $2 ":Area:" $5 " Network: Realative Rating:" $NF"\n";
   Sev[area] += $2;
   Rat[area] += $NF;
   Cnt[area] += 1;
}

{ prv_line = $0 }

END {
   for (area in Areas) {
      print "--- Area:", area;
      print Areas[area];
      if (Cnt[area] == 0) 
         Cnt[area] = 1;
      printf("%s Network Averages:Risk Severity:%01.1f:Relative Rating:%01.1f\n", area, Sev[area]/Cnt[area], Rat[area]/Cnt[area]);
      print ""
   }

}

Output:

--- Area: External
PATCH MANAGEMENT AND SOFTWARE UPDATES - EXTERNAL:Risk Severity:5:Area:External Network: Realative Rating:3
WIRELESS AP:Risk Severity:5:Area:External Network: Realative Rating:2

External Network Averages:Risk Severity:5,0:Relative Rating:2,5

--- Area: Administrative
IT DOCUMENTATION:Risk Severity:5:Area:Administrative Network: Realative Rating:4

Administrative Network Averages:Risk Severity:5,0:Relative Rating:4,0

Jean-Pierre.

Hi Guy,
I like this one, it is really a interesting question.
Hope below can help you.

input:

A
Risk Severity: High Area: External Network Relative Rating: Medium
B
Risk Severity: High Area: External Network Relative Rating: Poor
C
Risk Severity: High Area: Administrative Relative Rating: High
D
Risk Severity: High Area: Internal Network Relative Rating: Medium
E
Risk Severity: High Area: Internal Network Relative Rating: Inadequate
F
Risk Severity: High Area: Administrative Relative Rating: Excellent

output:

C Risk Severity: 5 Area: Administrative Relative Rating: 4
F Risk Severity: 5 Area: Administrative Relative Rating: 5
Administrative Average:Risk Severity:5 ------ Relative Rating:4.5

D Risk Severity: 5 Area: Internal Network Relative Rating: 3
E Risk Severity: 5 Area: Internal Network Relative Rating: 1
Internal Average:Risk Severity:5 ------ Relative Rating:2

A Risk Severity: 5 Area: External Network Relative Rating: 3
B Risk Severity: 5 Area: External Network Relative Rating: 2
External Average:Risk Severity:5 ------ Relative Rating:2.5

code:

awk 'BEGIN{
sev["High"]=5
sev["Medium"]=3
sev["Low"]=1
rate["Inadequate"]=1
rate["Poor"]=2
rate["Medium"]=3
rate["High"]=4
rate["Excellent"]=5
}
{
if (NF>2)
{
	$3=sev[$3]
	$NF=rate[$NF]
	sum_rate[$5]=sum_rate[$5]+$NF
	sum_sev[$5]=sum_sev[$5]+$3
	num[$5]=num[$5]+1
	out[$5]=sprintf("%s\n%s %s",out[$5],temp,$0)
}
else
{
	temp=$0
}
}
END{
for(i in out)
{
	print out
	print i" Average:Risk Severity:"sum_sev/num" ------ Relative Rating:"sum_rate/num
}
}' filename

Thank you, guys! :b: