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 :

Filtre conditionnel en bash (awk ou autre commande)


Sujet :

Shell et commandes GNU

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 30
    Par défaut Filtre conditionnel en bash (awk ou autre commande)
    Bonjour à tous,

    J'ai un fichier texte composé de lignes ayant le format

    <ID> <champs1_texte> <champs2_texte> ((<champ3_texte>:<nombre1>:<nombre2>))

    Par exemple:

    6576756784578 ceci-est-le-champs-1 ceci-est-le-champs-2 ((ceci-est-le-champs-3:156:320))
    6743465475799 ceci-est-le-champs-4 ceci-est-le-champs-5 ((ceci-est-le-champs-6:92:50))
    1242346774621 ceci-est-le-champs-7 ceci-est-le-champs-8 ((ceci-est-le-champs-8:234:234))



    Je souhaite afficher uniquement les lignes dont le nombre 1 est compris entre 90 et 120 (dans notre cas, la ligne 2).

    Pourriez-vous m'aider svp à trouver la commande bash (avec awk ou autre) qui permet d'obtenir ce résultat ?

    merci

  2. #2
    Membre émérite Avatar de balkany
    Homme Profil pro
    Touriste
    Inscrit en
    Juillet 2017
    Messages
    348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Touriste

    Informations forums :
    Inscription : Juillet 2017
    Messages : 348
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk -F: '$2>90 && $2<120' fichier
    en remplaçant < et > par <= et >= si besoin, et à condition qu'il n'y ait pas de : dans les champs contenant du texte.

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 30
    Par défaut
    non je n'ai pas de : donc ça fonctionne, merci !

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 30
    Par défaut
    Bonjour,

    Je me permet de ré-ouvrir la discussion car je me suis trompé, la condition doit d'effectuer sur le nombre2 et pas le nombre1.
    Du coup il faudrait une condition dans awk qui fasse apparaitre le fait que le nombre compris entre les caractères : et ) soit compris entre 90 et 120.

    Merci à nouveau pour votre aide !

  5. #5
    Membre émérite Avatar de balkany
    Homme Profil pro
    Touriste
    Inscrit en
    Juillet 2017
    Messages
    348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Touriste

    Informations forums :
    Inscription : Juillet 2017
    Messages : 348
    Par défaut
    Avec conversion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk -F: '+$3>90 && +$3<120' fichier
    ou sans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk -F':|))' '$3>90 && $3<120' fichier

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 30
    Par défaut
    Merci, la première réponse 'avec conversion' fonctionne très bien :-)

    La seconde génère pour info une erreur :
    awk: illegal primary in regular expression )) at )
    input record number 1, file
    source line number 1

    Merci balkany !

  7. #7
    Membre émérite Avatar de balkany
    Homme Profil pro
    Touriste
    Inscrit en
    Juillet 2017
    Messages
    348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Touriste

    Informations forums :
    Inscription : Juillet 2017
    Messages : 348
    Par défaut
    J'ai hésité car chez moi ça passe, mais peut-être que chez toi (selon la version de awk), il faut protéger les parenthèses :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk -F':|\\)\\)' '$3>90 && $3<120' fichier

  8. #8
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 30
    Par défaut
    Ca fonctionne, merci

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

Discussions similaires

  1. Faire exécuter une commande d'un bash dans un autre bash
    Par Mazman dans le forum Shell et commandes POSIX
    Réponses: 3
    Dernier message: 06/12/2011, 07h07
  2. [awk] Récupérer une commande system dans un awk
    Par zebulon90 dans le forum Shell et commandes GNU
    Réponses: 9
    Dernier message: 18/09/2007, 10h52
  3. Mise en forme conditionnelle d'un onglet à un autre
    Par melodyyy dans le forum Excel
    Réponses: 5
    Dernier message: 06/07/2007, 10h28
  4. filtre conditionnel Adoconnection
    Par host22 dans le forum Bases de données
    Réponses: 3
    Dernier message: 11/04/2007, 17h04
  5. Crypter, grep et autre commande
    Par bobymaw dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 19/09/2004, 12h29

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