Eu acredito que com o número de linhas que você apresenta, provavelmente você está trocando ...
O script perl abaixo está usando uma árvore B em disco (algo muito comum em bancos de dados) para a matriz - estamos usando quase nenhuma memória RAM.
$ cat remdup
#!/usr/bin/perl
use DB_File;
tie %seen, 'DB_File', "mydbfile.db", O_RDWR|O_CREAT|O_TRUNC ,0666, $DB_BTREE;
while(<>){
if(/^#/) { print; }
elsif(/(.*?),/) { $a=lc($1);
print if( ! $seen{$a}++)}
}
de qualquer maneira, levará muito tempo para processar (16s para 1 milhão de linhas no meu laptop de 5 anos)
Uso: tac file | perl remdup > output
Editar: se você executar qualquer solução, informe-nos os horários.