Besoin d'aide linux/unix Mac sur travaux sur doublons! [Résolu/Fermé]

Signaler
Messages postés
2
Date d'inscription
mercredi 5 octobre 2016
Statut
Membre
Dernière intervention
6 octobre 2016
-
Messages postés
36299
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
-
Bonjour à tous, je suis nouveau sur ce forum
J'utilise des fonctions basique de linux/unix sous mac, mais ne pense pas avoir assez de connaissance pour resoudre une requete
J'ai fait divers requetes de croisement et filtrage de donnees pour arriver à l'enoncée suivante simplifiée
Ce qui m'interesse ce sont les champs n°2 et n°4 comme element de requete
On remarque des doublons sur le champs n°4 (52KTM...) et c'est ce qui m'interesse! Je veux travailler sur les doublons
Je veux supprimer de cette liste les lignes contenant les ref de champ n°5 qui sont uniques et garder les lignes de doublons, ou plutôt
en finalité, je voudrais garder les lignes avec une seule des reference n°5 de doublon où la ligne gardée serait celle qui a le champs n°2 avec le chiffre le plus élevé
donc supprimer les lignes où il y a qu'une occurence en champs n°5
et garder par exemple id 263787 nom 52KTM75B MOTOR et pas id 262111 nom 52KTM75B MOTOR qui est plus ancien (263787>262111, et commun: 52KTM75B), et ainsi de suite
awk? sort? condition?
j'ai commencé avec des essai awk, mais ne suis pas sur d'avoir tous compris, j'ai testé 'uniq' j'ai reussi à enlever uniquement la premiere ligne avec champs n°5 unique et pas la 8, ce ne doit pas etre la bonne expression
Si quelqu'un peut m'aider à resoudre ce pb, et m'orienter, pour les fois suivantes car j'aurais d'autres requetes un peu de ce type a realiser
je vous remercie d'avance
ian
Ma liste:
id 263786 nom 52KTM75A MOTOR
id 262111 nom 52KTM75B MOTOR
id 263787 nom 52KTM75B MOTOR
id 262112 nom 52KTM78F MOTOR
id 263788 nom 52KTM78F MOTOR
id 262113 nom 52KTM78B MOTOR
id 263789 nom 52KTM78B MOTOR
id 263790 nom 52KTM96C MOTOR
id 262114 nom 52KTM96G MOTOR
id 263791 nom 52KTM96G MOTOR
id 262115 nom 52KTM99B MOTOR
id 263792 nom 52KTM99B MOTOR
id 262116 nom 52KTM99F MOTOR
id 263793 nom 52KTM99F MOTOR

2 réponses

Messages postés
1156
Date d'inscription
lundi 2 mai 2016
Statut
Contributeur
Dernière intervention
22 décembre 2020
149
Salut,

En espérant avoir bien compris ton problème (un exemple AVANT => APRES aurait été un plus) :

$ cat liste.txt
id 263786 nom 52KTM75A MOTOR
id 262111 nom 52KTM75B MOTOR
id 263787 nom 52KTM75B MOTOR
id 262112 nom 52KTM78F MOTOR
id 263788 nom 52KTM78F MOTOR
id 262113 nom 52KTM78B MOTOR
id 263789 nom 52KTM78B MOTOR
id 263790 nom 52KTM96C MOTOR
id 262114 nom 52KTM96G MOTOR
id 263791 nom 52KTM96G MOTOR
id 262115 nom 52KTM99B MOTOR
id 263792 nom 52KTM99B MOTOR
id 262116 nom 52KTM99F MOTOR
id 263793 nom 52KTM99F MOTOR

$ sort -k 4,4 -k 2r,2r liste.txt | uniq -f3
id 263786 nom 52KTM75A MOTOR
id 263787 nom 52KTM75B MOTOR
id 263789 nom 52KTM78B MOTOR
id 263788 nom 52KTM78F MOTOR
id 263790 nom 52KTM96C MOTOR
id 263791 nom 52KTM96G MOTOR
id 263792 nom 52KTM99B MOTOR
id 263793 nom 52KTM99F MOTOR

1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
1156
Date d'inscription
lundi 2 mai 2016
Statut
Contributeur
Dernière intervention
22 décembre 2020
149
Et en me référant à ce qu tu as répondu sur developpez.net, avec cette formule ça devrait le faire :

$ tac liste.txt | uniq -d -f 3
id 263793 nom 52KTM99F MOTOR
id 263792 nom 52KTM99B MOTOR
id 263791 nom 52KTM96G MOTOR
id 263789 nom 52KTM78B MOTOR
id 263788 nom 52KTM78F MOTOR
id 263787 nom 52KTM75B MOTOR
Messages postés
2
Date d'inscription
mercredi 5 octobre 2016
Statut
Membre
Dernière intervention
6 octobre 2016
>
Messages postés
1156
Date d'inscription
lundi 2 mai 2016
Statut
Contributeur
Dernière intervention
22 décembre 2020

Bonsoir merci beaucoup, c'est simple et cela marche super, je voyez cela bien plus compliqué, du coup on m'a donné des variante, et je vous remercie tous à ce sujet
Effectivement j'aurais aimé utilisé un sort mais il restait les lignes ou le champs 4 n'avait qu'une occurence, ce qui ne m'interessait pas, je voulais juste garder quand le champs 4 avait 2 occurence ou plus la derniere version en me basabt sur le champs n°2
Merci encore
Amicalement
Yann
Messages postés
36299
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 211
Re-

$ cat autre.txt 
id 263786 nom 52KTM75A MOTUS
id 262111 nom 52KTM75B MOTOR
id 263787 nom 52KTM75B ROTOR
id 262112 nom 52KTM78F BOTOR
id 263788 nom 52KTM78F MOTIF
id 262113 nom 52KTM78B MOKOR
id 263789 nom 52KTM78B MOTAR
id 263790 nom 52KTM96C MOTOS
id 262114 nom 52KTM96G MATAR
id 263791 nom 52KTM96G MITAR
id 262115 nom 52KTM99B LOLOL
id 263792 nom 52KTM99B COTON
id 262116 nom 52KTM99F XOTOR
id 263793 nom 52KTM99F FOTOR

$ sort -r -k4,4 autre.txt | uniq -d -w 9 -f 3
id 263793 nom 52KTM99F FOTOR
id 263792 nom 52KTM99B COTON
id 263791 nom 52KTM96G MITAR
id 263788 nom 52KTM78F MOTIF
id 263789 nom 52KTM78B MOTAR
id 263787 nom 52KTM75B ROTOR