IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Traitements sur doublons


Sujet :

Shell et commandes GNU

  1. #1
    Candidat au Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Octobre 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2016
    Messages : 14
    Points : 4
    Points
    4
    Par défaut Traitements sur doublons
    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:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    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. #2
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 286
    Points : 12 742
    Points
    12 742
    Par défaut
    Bonjour,

    Un exemple avec gawk:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    $ cat /tmp/f1.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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $ awk 'BEGIN{PROCINFO["sorted_in"]="@ind_num_asc"};A[$4] {if(B[$4] < $2){C[$4]=$0};A[$4]++;next}{A[$4]++;B[$4]=$2;C[$4]=$0};END{for (i in A){print C[i]}}' /tmp/f1.txt 
    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
    Cordialement.

  3. #3
    Candidat au Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Octobre 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2016
    Messages : 14
    Points : 4
    Points
    4
    Par défaut
    re bonsoir, c'est hyper gentil à vous, merci
    par contre dans le résultat je vois que les deux lignes ayant une seule occurrence en champs n°4 sont gardées, et il ne les faut pas dans le résultat, uniquement la ligne la plus récente quand il y a deux occurrences sur le champs n°4
    je ne veux pas abuser, mais si vous pouviez m'aider à finaliser, ou est ce moi qui suit une pipe et qui n'est pas compris?

    dans votre exemple toutes les réponses sont bonne, issue du champs N°4 quand il est double
    sauf :id 263786 nom 52KTM75A MOTOR et id 263790 nom 52KTM96C MOTOR qui n'avait qu'une occurrence au champs n°4, et que je ne veux pas garder dans mon élément de résultat puisque que rien à comparer en antécédent !

    votre formulation, la liste c'est bien l résultat ? Si oui 263786 nom 52KTM75A MOTOR et id 263790 nom 52KTM96C MOTOR en trop car une occurrence en champs n°4 et pas 2 occurrences

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $ awk 'BEGIN{PROCINFO["sorted_in"]="@ind_num_asc"};A[$4] {if(B[$4] < $2){C[$4]=$0};A[$4]++;next}{A[$4]++;B[$4]=$2;C[$4]=$0};END{for (i in A){print C[i]}}' /tmp/f1.txt 
    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
    En vous remerciant beaucoup, car je me débrouille mais pas à ce point !
    A très vite
    Amicalement

    Yann

  4. #4
    Candidat au Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Octobre 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2016
    Messages : 14
    Points : 4
    Points
    4
    Par défaut rebonsoir Disedorgue
    Merci beaucoup, pour la syntaxe, le awk est encore compliqué pour moi, je n'ai pas toutes les notions de paramètre et option!?

    J'ai rejoué votre script awk, c'est trop balaise pour moi, cela me donne bien le résultat.
    Par contre il faudrait enlevé en premier, je pense, les lignes où il y a une seule occurrence dans le champs n°4 qui du coup n'ont rien à comparer, puisqu'une seule occurrence, et ceci avant de comparer ligne au champ n°4 doublé
    Les lignes en trop dans le résultat car initialement qu'une occurrence et pas deux sur le champs n°4, et ces lignes ne m' 'intéresse pas, sont:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    id 263786 nom 52KTM75A MOTOR
    id 263790 nom 52KTM96C MOTOR
    où le champs n°4 n’apparaît qu'une fois dans la liste initiale, il ne me les faut pas dans la liste finale, car en fait, si je garde l’occurrence la plus récente quand le champs n°4 comporte un doublon, c'est que je travaille que sur le plus récent et uniquement s'il y a deux versions, donc quand l’occurrence du champs n°4 n'y est qu'une fois la ligne ne m’intéresse pas!
    Ce que je vais faire avec cette liste à la fin c'est ne garder que le champs n°2 pour construire un script automatiquement pour aller chercher ces données sur un serveur, afin de les contrôler, ce script je lai déjà fait, me manque juste la partie de trie par rapport au doublon à garder pour le contrôle, c'est pourquoi je ne veux pas en résultat les lignes qui ont une seule occurrence initialement car je n'ai pas de données de comparaison pour la suite contrairement au lignes aux champs n°4 doublé

    S'il vous plaît, pouvez vous modifier vote syntaxe pour se faire, et en vous remerciant, pour que les occurrence uniques initiales sur champs n°4 ne soit pas en résultat final, le reste est parfait par rapport à mon attente

    J'adore UNIX, je suis un peu autodidacte, pour l'ensemble des requêtes, mais je ne comprend pas tous le cheminement des paramétrages du awk, j’espère que cela viendra.
    Je sais extraire des bouts de lignes de fichier pour constituer un script pour récupérer des données a traiter, à contrôler ou à recontrôler géométriquement, stat, , et images par exemple
    Mais je suis un peu frustrer de buter là dessus, car le résultat de requête initiale provient de plusieurs xml, avec multitude de données similaires imbriquées, malgré cela j'ai bien récupérer la liste que je voulais.
    Et là cela me semble tellement pas grand chose, ce que je veux: deux champs en référence garder que le plus récent du doublon, et pas la ligne unique, et quand je vois votre awk, j'ai l'impression que c'est insurmontable.
    Pouvez vous retravailler le script pour qu'il ne ramasse pas non plus donc les lignes où initialement le champs n°4 est unique
    Merci à vous
    Sinon y a t'il un bon endroit ou on explique bien le awk et le uniq?
    Amicalement
    Yann

  5. #5
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 286
    Points : 12 742
    Points
    12 742
    Par défaut
    Pas de souci, pour corriger le awk, en fait il ne manque qu'une condition à vérifier (en rouge) avant d'afficher les données et dans le même temps, corrigeons un oubli qui poserait problème en cas de triplés (en orange) .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk 'BEGIN{PROCINFO["sorted_in"]="@ind_num_asc"};A[$4] {if(B[$4] < $2){C[$4]=$0;B[$4]=$2};A[$4]++;next}{A[$4]++;B[$4]=$2;C[$4]=$0};END{for (i in A){if(A[i]>1) print C[i]}}' /tmp/f1.txt
    Ici, l'algo est quelque peu différent de celui que tu proposes:
    On stocke dans le tableau A le nombre d'occurences du champs 4 que l'on rencontre.
    Dans le tableau B on stocke pour chaque occurences différentes du champs 4 la plus grande valeur du champs 2.
    Dans le tableau C on stocke pour chaque occurences différentes du champs 4 la ligne complète si la valeur du champs 2 est plus grande.
    Une fois que l'on a traité tout le fichier, on n'affiche que les lignes stocké dans C par rapport au tableau A qui comprend le décompte du nombre d'occurence pour chaque champs 4.
    Une écriture plus compréhensible du prog awk:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    awk '
    BEGIN{
       PROCINFO["sorted_in"]="@ind_num_asc"
    }
    A[$4] {
       if(B[$4] < $2){
          C[$4]=$0
          B[$4]=$2
       }
       A[$4]++
       next
    }
    {
       A[$4]++
       B[$4]=$2
       C[$4]=$0
    }
    END{
       for (i in A){
          if(A[i]>1) print C[i]
       }
    }' /tmp/f1.txt
    Cordialement.

  6. #6
    Candidat au Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Octobre 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2016
    Messages : 14
    Points : 4
    Points
    4
    Par défaut rebonsoir Disedorgue, un grand merci ;-)
    re bonsoir, c'est super, cela marche super sur le bon fichier complet, trop genial
    faut vraiment que j'approndisse ce awk, il y a beaucoup de parametre qui me pertube pour l'instant mais cela va venir, je m'en sors beaucoup pour l'utilisation des grep, sed, cut, etc... j'en decouvre de jour en jour pour ces derniers.
    Mais le awk, et je suppose les choses un peu conditionneles ce n'est pas encore cela!

    Mais j'adore, donc j'y arriverai!

    En tout cas un grand merci!
    Bien à vous

    Amicalement

    Yann

  7. #7
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    $ 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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $ sort -k 4,4 -k 2r,2 liste.txt | uniq -d -f 3
    id 263787 nom 52KTM75B MOTOR
    id 263789 nom 52KTM78B MOTOR
    id 263788 nom 52KTM78F MOTOR
    id 263791 nom 52KTM96G MOTOR
    id 263792 nom 52KTM99B MOTOR
    id 263793 nom 52KTM99F MOTOR
    $ man woman
    Il n'y a pas de page de manuel pour woman.

  8. #8
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 286
    Points : 12 742
    Points
    12 742
    Par défaut
    Au début, j'avais pensé (oui, ça m'arrive des fois ) à une solution avec uniq, mais j'ai pris comme hypothèse supplémentaire que la dernière colonne pouvait être autre chose que MOTOR et comme l'on doit considérer que les doublons de la quatrième colonne...
    Cordialement.

  9. #9
    Candidat au Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Octobre 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2016
    Messages : 14
    Points : 4
    Points
    4
    Par défaut rebonsoir Disedorgue
    Oui effectivement, MOTOR est un exemple, ce peut etre autre chose et pas forcement un unique mot, donc bien vu
    Merci
    Encore
    Amicalement
    Yann

  10. #10
    Candidat au Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Octobre 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2016
    Messages : 14
    Points : 4
    Points
    4
    Par défaut rebonsoir Disedorgue
    Effectivement c'est bien votre solution la meilleure, je viens de tester le coup de la derniere colonne, on ne recupere les lignes que j'attends qu'avec le awk!
    car J'ai eu aussi une reponse avec un sort et uniq, cela marche tres bien aussi, sauf si les noms sont effectivement differents dans le dernier champs!

    Encore chapeau et un grand merci

    A tres vite
    Bien à vous
    Amicalement
    Yann

  11. #11
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Citation Envoyé par ianSolo_66 Voir le message
    je viens de tester le coup de la derniere colonne, on ne recupere les lignes que j'attends qu'avec le awk!
    Qu'à cela ne tienne…

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    $ 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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $ 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
    $ man woman
    Il n'y a pas de page de manuel pour woman.

  12. #12
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 286
    Points : 12 742
    Points
    12 742
    Par défaut
    Bien trouvé,
    Après, certains cas ne passeraient pas mais je ne pense pas qu'il puisse les rencontrer...
    Cordialement.

  13. #13
    Candidat au Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Octobre 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2016
    Messages : 14
    Points : 4
    Points
    4
    Par défaut Bonjour zipe31
    J'ai essayé votre syntaxe le problème est que le -w ne passe pas dans ma fenetre terminal Mac
    il me repond illegal option -- w
    Je ne sais pourquoi, mais quand je fais un man uniq l'option w ne fait pas partie des option pour uniq, peu etre cela?
    Merci pour vos lumieres d'eclairicissement
    Amicalement
    Yann

  14. #14
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Effectivement, la version pour MacOS est un peu restreinte comparée à la version coreutils
    $ man woman
    Il n'y a pas de page de manuel pour woman.

  15. #15
    Candidat au Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Octobre 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2016
    Messages : 14
    Points : 4
    Points
    4
    Par défaut re bonsoir zipe31
    re bonsoir zipe31, ce n'est pas grave, merci quand meme à vous pour votre implication
    Un sort cela me parle plus qu'un awk, mais je buttais sur la meme chose, l'option w que je ne connais pas aurait ete bien, mais tant pis!
    Amicalement
    Yann

  16. #16
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 286
    Points : 12 742
    Points
    12 742
    Par défaut
    En fait, il suffirait de retirer le dernier champs, puis de faire le sort et l'uniq et ensuite de retrouver la ligne complète dans le fichier...
    Ce qui donnerait un cut|sort|uniq|grep...

    Mais je trouve que ce n'est pas assez court, après tout, c'est le week-end, et ça peut être un bon défi, de trouver la ligne de code la plus courte (en nombre de caractère)...
    Cordialement.

  17. #17
    Candidat au Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Octobre 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2016
    Messages : 14
    Points : 4
    Points
    4
    Par défaut rebonsoir Disedorgue
    Comme j'ai dit hier soir votre script fonctionne tres bien, je repondais par rapport à la premiere formulation où effectivement il pouvait y avoir un problème avec le dernier champs, mais la derniere formule proposee me convient tres bien et fonctionne tres bien

    c'est a dire celle ci:
    awk 'BEGIN{PROCINFO["sorted_in"]="@ind_num_asc"};A[$4] {if(B[$4] < $2){C[$4]=$0;B[$4]=$2};A[$4]++;next}{A[$4]++;B[$4]=$2;C[$4]=$0};END{for (i in A){if(A[i]>1) print C[i]}}' /tmp/f1.txt
    C'est impeccable, merci encore
    Amicalement
    Yann

  18. #18
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    En fait, il suffirait de retirer le dernier champs, puis de faire le sort et l'uniq et ensuite de retrouver la ligne complète dans le fichier...
    Ce qui donnerait un cut|sort|uniq|grep...

    Mais je trouve que ce n'est pas assez court, après tout, c'est le week-end, et ça peut être un bon défi, de trouver la ligne de code la plus courte (en nombre de caractère)...
    Je me lance…

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $ grep -f <(cut -d ' ' -f 1-4 liste.txt | sort -r -k4,4 | uniq -d -f 3) liste.txt 
    id 263787 nom 52KTM75B ROTOR
    id 263788 nom 52KTM78F MOTIF
    id 263789 nom 52KTM78B MOTAR
    id 263791 nom 52KTM96G MITAR
    id 263792 nom 52KTM99B COTON
    id 263793 nom 52KTM99F FOTOR
    $ man woman
    Il n'y a pas de page de manuel pour woman.

  19. #19
    Candidat au Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Octobre 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2016
    Messages : 14
    Points : 4
    Points
    4
    Par défaut Bonjour zipe31
    Bonjour, merci, et c'est super de voir les possibilités qui existent pour y arriver, cette formulation, fonctionne tres bien également! Super!
    Merci encore
    Amicalement
    Yann

  20. #20
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 286
    Points : 12 742
    Points
    12 742
    Par défaut
    Une autre solution proche de celle de zipe31, un peu plus longue aussi mais peut-être plus rapide...:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $ a='s/\(\S*\) \(\S*\)$/\2 \1/' ; sed "$a" liste.txt | sort -r -k5,5 | uniq -d -f4 | sed "$a"
    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
    Cordialement.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] Traitement sur Doublon
    Par dvdhag123 dans le forum Excel
    Réponses: 2
    Dernier message: 21/10/2015, 16h00
  2. [C#] [.NET 1.1] [VSTUDIO 2003] Traitement sur les fontes
    Par stailer dans le forum Windows Forms
    Réponses: 4
    Dernier message: 04/08/2005, 19h53
  3. [VB.NET] Traitement sur chaine (simple)
    Par Tempotpo dans le forum Windows Forms
    Réponses: 4
    Dernier message: 24/03/2005, 13h20
  4. [FLASH MX 2004] Traitements sur le resultat d'un AS.
    Par Med_Prog dans le forum Flash
    Réponses: 8
    Dernier message: 21/11/2004, 13h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo