Supprimer les lignes dupliquées d’un fichier texte est une tâche courante en script Bash. Cet article explore deux méthodes efficaces : l’utilisation de sort
et uniq
, et l’exploitation de la puissance d’awk
.
Table des matières
Utilisation de sort
et uniq
Cette approche combine deux utilitaires Unix fondamentaux pour une solution simple. sort
trie les lignes alphabétiquement, une condition préalable pour uniq
, qui élimine ensuite les doublons consécutifs. L’ordre de la *première* occurrence de chaque ligne est préservé.
Voici la commande :
sort file.txt | uniq > file_unique.txt
Ceci envoie la sortie triée de file.txt
à uniq
, en enregistrant les lignes uniques dans file_unique.txt
. Le fichier original reste inchangé.
Exemple :
Si file.txt
contient :
apple
banana
apple
orange
banana
grape
file_unique.txt
contiendra :
apple
banana
grape
orange
Utilisation de la commande awk
awk
offre une solution plus flexible et puissante, particulièrement utile lorsque la préservation de l’ordre d’origine des lignes est cruciale. Il utilise un tableau associatif pour suivre les lignes rencontrées.
La commande est remarquablement concise :
awk '!seen[$0]++' file.txt > file_unique.txt
Décomposons cela :
$0
représente toute la ligne actuelle.seen[$0]
accède à un élément du tableauseen
, en utilisant la ligne comme clé.++
incrémente post-fixe la valeur (initialement 0).!
nie le résultat ; la ligne n’est imprimée que si elle est rencontrée pour la première fois (lorsqueseen[$0]
est 0).
Cette méthode maintient l’ordre d’origine des lignes.
Exemple :
En utilisant le même file.txt
, la sortie dans file_unique.txt
sera :
apple
banana
orange
grape
Conclusion :
Les deux méthodes suppriment efficacement les lignes dupliquées. sort | uniq
est plus simple pour les scénarios de base, tandis qu’awk
offre une flexibilité et un contrôle supérieurs, en particulier pour préserver l’ordre d’origine ou gérer des besoins plus complexes de suppression des doublons.