Sunday, July 20, 2008

Count and print using awk associative array


Input file:

$ cat results.txt
Anil:Awk:Pass
Rakesh:Sed:Fail
Anil:Expect:Pass
Bau:Bash:Fail
sbnak:ksh:Pass
Rakesh:Awk:Pass
Anil:Bash:Fail
Neo:zsh:Fail

Required: Count the number of Pass and Fails for each of the names(1st field) and print in the following order. i.e.

Name Num_fail_entries Num_pass_entries

Awk solution:


$ awk '
BEGIN {FS=":"; print "Name Num_fail Num_pass"} {
n[$1]++;
F_[$1] += ($3 == "Fail" ? 1 : 0)
P_[$1] += ($3 == "Pass" ? 1 : 0)
}
END {
for (i in n) {
print i,F_[i],P_[i]
}
}' results.txt



Output:

Name Num_fail Num_pass
Neo 1 0
Rakesh 1 1
Anil 1 2
Bau 1 0
sbnak 0 1

No comments:

© Jadu Saikia www.UNIXCL.com