he bien si ton fichier tient en mémoire, tu peux remplir un tableau contenant chaque ligne, puis le trier, puis enlever les doublons.
je n'ai jamais utilisé perl, mais tu dois pouvoir :
* créer une structure qui contient tous tes champs
* lire les 5000 champs dans un tableau de ces structures
* les trier (par ex avec qsort() du C, tu donnes un bout de code qui permet de faire le tri - ici, des comparaisons de chaînes suffiront, sur les 20 champs)
* une fois que ton tableau est trié, tu le parcours, puis tu écris chaque ligne à condition que la suivante soit différente.
une variation est de faire un hash des lignes, par ex un md5, associer à ce hash le numéro de ligne du fichier, trier les md5, et se servir du numéro de ligne pour relire le fichier source et écrire le fichier trié (en fait il vaut mieux stocker un offset de fichier et faire des seek() dedans).
la deuxième soluce implique que tes lignes soient identiques au caractère près. sinon, boum. tu peux aussi rajouter un bout de code qui transforme la ligne en une réprésentation interne pour créer ton hash (ie, convertir tout en minuscule, supprimer les espaces superflus, etc.)