Supprimer des doublons d'un fichier en conservant la dernière ligne - Shell/Batch - Programmation
Marsh Posté le 13-06-2007 à 17:10:29
Pour l'option -u, sort prend effectivement la première ligne (tri alphabétique de la ligne complète).
Un petit extrait de la doc (GNU) sort :
Citation : A pair of lines is compared as follows: `sort' compares each pair of |
Tu ne peux pas faire un tri sans option -u et traiter le résultat par la commande uniq car cette traite la ligne complète.
Il va donc te falloir ecrire ta propre commande uniq
Voici un example (my_usort.sh) de ce qui peut être fait:
sort -k1,1.10 sort.txt | \ |
Utilisation:
$ cat sort.txt |
Jean-Pierre.
Marsh Posté le 14-06-2007 à 20:39:31
Salut,
Tu peux aussi faire un sed sur la ligne contenant le terme TITI. Par exemple, un sed '/TITI/d/' toto > titi à la suite de ta commande sort -u ...
Phil.
Ps: A verifier pour la syntaxe du sed, j'ai pas de console unix sous la main.
Marsh Posté le 19-06-2007 à 08:21:35
Merci Phil,
Le problème c'est que, dans mon fichier, le contenu de ce champ est variable et je ne sais donc pas ce que doit contenir le max de la colonne.
Le petit script de Jean-Pierre fonctionne à merveille pour suppléer l'option manquante du sort.
Merci beaucoup.
Marsh Posté le 13-06-2007 à 14:29:00
Bonjour,
Sous Unix, j'ai un fichier nommé toto sous ce format :
AABB;CCDD;TITI
BBAA;DDCC;LULU
AABB;CCDD;TOTO
De ce fichier, je veux supprimer les doublons sur les 10 premiers caractères.
J'ai donc passer la commande suivante :
sort -u +0.0 -0.10 toto > titi
En résultat, j'obtiens bien deux lignes
AABB;CCDD;TITI
BBAA;DDCC;LULU
mais je ne veux pas de la ligne TITI mais de la ligne TOTO.
Quand j'inverse les deux lignes dans le fichier et que je repasse la commande, j'obtiens toujours le même résultat.
Je pense donc que le sort prend la plus petite donnée en tri alphabétique.
Est-ce-que je me trompe ?
Y-a-t-il une solution pour obtenir le résultat suivant :
AABB;CCDD;TOTO
BBAA;DDCC;LULU
Merci de votre aide.