Signaler

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

Posez votre question ianSolo_66 2Messages postés mercredi 5 octobre 2016Date d'inscription 6 octobre 2016 Dernière intervention - Dernière réponse le 7 oct. 2016 à 14:45 par zipe31
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
Utile
+1
plus moins
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

Cette réponse vous a-t-elle aidé ?  
UnGnU 547Messages postés lundi 2 mai 2016Date d'inscription 13 octobre 2017 Dernière intervention - 6 oct. 2016 à 09:56
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
ianSolo_66 2Messages postés mercredi 5 octobre 2016Date d'inscription 6 octobre 2016 Dernière intervention - 6 oct. 2016 à 19:25
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
Utile
+0
plus moins
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

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !