Uma solução Perl:
perl -F'\s*,\s*' -lane '
BEGIN{ $outfile = "output_file_name";
open $OUTFILE , ">" , $outfile
}
$h{$F[0]}{$F[1]}++;
END{
$i{$_}++ for map {keys $h{$_}} keys %h;
print $OUTFILE "number,".join ",",sort keys %i;
for $number (keys %h) {
$string = "$number,";
$string .= $h{$number}{$_} ? "Y," : "N," for keys %i;
$string =~ s/,$//;
print $OUTFILE $string
}
} ' input_file
Código testado e funciona com sua entrada de exemplo. Basta modificar output_file_name
para ser o nome real que você deseja para o arquivo de saída.
Aviso
Isso irá destruir o arquivo de saída se ele existir. Se você preferir acrescentar, altere ">"
para ">>"
na terceira linha.