Besoin d'aide linux/unix Mac sur travaux sur doublons!

Résolu/Fermé
ianSolo_66 Messages postés 2 Date d'inscription mercredi 5 octobre 2016 Statut Membre Dernière intervention 6 octobre 2016 - 5 oct. 2016 à 21:54
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 - 7 oct. 2016 à 14:45
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
A voir également:

2 réponses

UnGnU Messages postés 1158 Date d'inscription lundi 2 mai 2016 Statut Contributeur Dernière intervention 22 décembre 2020 157
6 oct. 2016 à 08:04
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
UnGnU Messages postés 1158 Date d'inscription lundi 2 mai 2016 Statut Contributeur Dernière intervention 22 décembre 2020 157
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
0
ianSolo_66 Messages postés 2 Date d'inscription mercredi 5 octobre 2016 Statut Membre Dernière intervention 6 octobre 2016 > UnGnU Messages postés 1158 Date d'inscription lundi 2 mai 2016 Statut Contributeur Dernière intervention 22 décembre 2020
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
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 418
7 oct. 2016 à 14:45
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

0