Похоже, вам нужно что-то вроде:
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
, чтобы соответствующий столбец рейтинга содержал сводку, а два других получили просто пробел (в вашем примере - если вам нужно пустое поле, замените ""
with ""
)