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 :

Tri des lignes d'un fichier et consultation


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juillet 2020
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2020
    Messages : 175
    Par défaut Tri des lignes d'un fichier et consultation
    Bonjour,

    Voici mon fichier contenant sur une ligne une adresse séparé par ":" d'un nombre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    0xD5CCF7eBDE7ac7A2E0943CBfA503a5DE0242C153:3.562281e+22
    0xE30C035Fa670f1d831a4a1bAB49ff04fDff8E8bB:3.483386e+22
    0xEEeb3DF130e0b54d36a2b8faCb944E20e3Ec083d:4.0214e+22
    0xF24E3aE0C6ADAFAA143D4acA5D54DCDaDb1a29B1:5.971144e+22
    0xF3B00f68e70c788c748Ce59bA8185DF070068361:1.978e+22
    0xF9b36230A929651C493116902A2A3b93778F4445:6.0609015e+22
    0xFA9241FA2e6640Cce42Da8b7DF8C84fc662C6C6c:3.499651e+22
    0xFD053eef974B9b63F7A0AccfFfc4444233A149cC:2.1778393e+23
    Mon objectif est de trier les lignes du fichier selon le nombre, du plus grand au plus petit, puis de numéroter les lignes.
    Pour ensuite être en mesure de consulter dans le fichier le rang (n° de ligne) de telle adresse.

    Je m'y attèle...

  2. #2
    Membre confirmé
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juillet 2020
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2020
    Messages : 175
    Par défaut
    J'ai trouver cette commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat monfichierTMP.txt | sort -t: -k2n,2n
    Malheureusement je vais devoir bidouiller, car les nombres en puissance de 10 ne sont pas interprété et par exemple,
    le nombre 3.499651e+22 est considéré comme plus grand que 2.1778393e+23 par la commande de tri.

  3. #3
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 672
    Par défaut
    sort peut faire ça, avec l'option --general-numeric-sort.
    bien sûr, il faut préciser le séparateur et le champ de tri.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  4. #4
    Membre confirmé
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juillet 2020
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2020
    Messages : 175
    Par défaut
    Je viens d'essayer avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat monfichierTMP.txt | sort --general-numeric-sort -t: -k2nr,2nr
    Mais apparemment les e+23 ne sont pas en tête ?

  5. #5
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 672
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LC_ALL=C sort -t':' -k2rg tonFichier
    c'est le point décimal, qui pose problème.
    il faut donc modifier la locale pour qu'il soit correctement interprété comme séparateur décimal.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    Membre confirmé
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juillet 2020
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2020
    Messages : 175
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LC_ALL=C sort -t':' -k2rg  monfichier.txt
    LC_ALL=C : prendre le “.” comme séparateur décimal
    -t : spécifie le séparateur de champs
    -k : spécifie la colonne
    -r : trie en ordre inverse
    -g : prend en compte la notation scientifique 5.3762e+22

    Explication de LC_ALL et C :
    LC_ALL est la variable d'environnement qui remplace tous les autres paramètres de localisation.

    La locale C est une locale spéciale qui est censée être la locale la plus simple. Le paramètre C est destiné aux ordinateurs. Dans la locale C, les caractères sont des octets simples, le jeu de caractères est ASCII, l'ordre de tri est basé sur les valeurs des octets, la langue est généralement l'anglais américain et des choses comme les symboles monétaires ne sont pas définies.

    Dans un script, si vous voulez forcer un paramètre spécifique, la seule option sûre est de forcer LC_ALL.
    On exécute une commande avec LC_ALL=C pour éviter que les paramètres de l'utilisateur n'interfèrent avec notre script. Par exemple, si vous voulez que [a-z] corresponde aux 26 caractères ASCII de a à z, vous devez définir LC_ALL=C.

    La commande locale, appelée sans argument, donne un résumé des paramètres actuels de localisation.
    Différents aspects des localisations (comme le séparateur de milliers ou le caractère décimal, le jeu de caractères, l'ordre de tri, les noms de mois, de jours, les messages de langue ou d'application comme les messages d'erreur, le symbole monétaire) peuvent être définis à l'aide de quelques variables d'environnement.

  7. #7
    Membre confirmé
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juillet 2020
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2020
    Messages : 175
    Par défaut
    Enfin il reste à consulter le rang (n° de ligne) de telle adresse classée selon son nombre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sed -n '/0x3CE4a220353d09A9a831697c19F5Ec6335dD03C4/=' monfichierResult.txt
    19
    Merci N_BaH pour ton aide

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

Discussions similaires

  1. Tri des lignes d'une Table via Formulaire
    Par kato dans le forum Access
    Réponses: 3
    Dernier message: 19/04/2006, 12h53
  2. macro=remove des lignes d un fichier xls et reorga
    Par af_airone dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 26/10/2005, 15h08
  3. Shell pour supprimer des lignes d'un fichier
    Par nelsa dans le forum Autres langages
    Réponses: 2
    Dernier message: 20/09/2004, 12h26
  4. Extraire des lignes d'un fichier en commande bash
    Par newnew dans le forum Linux
    Réponses: 3
    Dernier message: 27/07/2004, 16h22
  5. Réponses: 4
    Dernier message: 24/04/2003, 22h28

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