Pessoalmente, eu faria tudo em Perl:
$ perl -00ne '/^(Student_\d+)/ && $count{$1}++;
/Name:\sA/ && $As++;
/Status:\s*Pass/ ? $pass++ : $fail++;
END{
print "$_ : $count{$_}\n" for keys(%count);
print "Pass: $pass\nFail:$fail\n";
print "Student names starting with A: $As\n"
}' file
Student_2 : 1
Student_1 : 1
Student_50 : 1
Pass: 2
Fail:2
Student names starting with A: 2
Se você insistir em comandos separados por operação, poderá usar:
$ awk '/^Student_/{a[$0]++} END{for(s in a){print s,a[s]}}' file
Student_1 1
Student_2 1
Student_50: 1
$ perl -ne '$pass++ if /:\s*Pass/; $fail++ if /:\s*Fail/;
END{print "Pass: $pass\nFail: $fail\n"}' file
Pass: 2
Fail: 2
$ echo "Student names starting with A: $(grep -c "^Name:\s*A" file )"
Student names starting with A: 2