Parece que você quer algo como:
awk 'BEGIN{FS=OFS=";"}
FNR==1{print "filename;good;fairly good;bad;id"}
$2=="good"{print $1, $4, " ", " ", $3}
$2=="fairly good"{print $1, " ", $4, " ", $3}
$2=="bad"{print $1, " ", " ", $4, $3}' infile
para que a coluna de classificação correspondente contenha o resumo e os outros dois obtenham apenas um espaço (conforme o seu exemplo - se você precisar de um campo vazio, substitua " "
por ""
)