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 :

extraction de lignes (délicat)


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Inscrit en
    Août 2007
    Messages
    308
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 308
    Billets dans le blog
    1
    Par défaut extraction de lignes (délicat)
    Bonjour

    j'ai un fichier qui contient des lignes de la sorte
    43 57 70 73 , 29 59 80 : 11

    donc des valeurs séparées par un espace ensuite une virgule ensuite d'autres valeurs (toujours séparées par des esapces) ensuite deux points et une seule valeur à la fin

    le probléme : je veux exatraire les lignes qui contiennent les valeurs 80 et 82 aprés la virgule (sachant que ces valeurs peuvent apparaitre avant la virgule mais ces lignes ne m'interessent pas)

    si quelqu'un peut m'aider
    merci beaucoup à vous

  2. #2
    Membre chevronné
    Inscrit en
    Janvier 2007
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 329
    Par défaut
    Salut,

    Je sais pas si c'est la meilleure solution, mais ça devrait marcher :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cut -d "," -f 2- tonfichier | grep " 80 " | grep " 82 "
    avec "tonfichier" le nom de ton fichier

  3. #3
    Membre éclairé

    Inscrit en
    Août 2007
    Messages
    308
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 308
    Billets dans le blog
    1
    Par défaut
    Oui merci..ça marche bien ta solution
    est ce que tu peux m'expliquer ceci : cut -d "," -f 2-
    je comprends couper ce qui est avant la virgule mais le reste?

    merci encore

  4. #4
    Membre chevronné
    Inscrit en
    Janvier 2007
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 329
    Par défaut
    "cut" est une commande pour découper les lignes d'un fichier.

    L'option "-d" sert à définir le caractère où on coupe (ici la virgule).

    L'option "-f" définit les morceaux qu'on veut garder : là il y a une virgule par ligne, donc deux morceaux. "2-" veut dire "tout à partir du deuxième morceau". C'est vrai que "2" aurait pu suffire ici.



    N'oublie pas le bouton "résolu"

  5. #5
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Par défaut
    Citation Envoyé par nina2007 Voir le message
    Bonjour

    j'ai un fichier qui contient des lignes de la sorte
    43 57 70 73 , 29 59 80 : 11

    donc des valeurs séparées par un espace ensuite une virgule ensuite d'autres valeurs (toujours séparées par des esapces) ensuite deux points et une seule valeur à la fin

    le probléme : je veux exatraire les lignes qui contiennent les valeurs 80 et 82 aprés la virgule (sachant que ces valeurs peuvent apparaitre avant la virgule mais ces lignes ne m'interessent pas)

    si quelqu'un peut m'aider
    merci beaucoup à vous
    Arretez de réinventer la roue il y a une chose qui permet de faire des selections c'est les regexp par exemple avec sed :


    la solution est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -n '/,\ 8[02]\ /p' fichier
    recherche ("," "espace" "8" ["0" ou "2"] "espace") && afficher FICHIER


    exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    francois@3EPC:~$ cat > test
    43 57 70 73 , 29 59 80 : 11
    55 34 60 , 80 76 43 : 10
    44 80 55 , 70 54 DS : 44
    44 82 , 55 44 33  : 0
    33 22 11 , 82 32 88 : 22
    ^D
    francois@3EPC:~$
    francois@3EPC:~$ sed -n '/,\ 8[02]\ /p' test
    55 34 60 , 80 76 43 : 10
    33 22 11 , 82 32 88 : 22
    francois@3EPC:~$ rm test
    n'utilisez pas des pipes commande | commande | commande quand c'est trop complexe genre selectionner couper substituer couper encore et convertir.... bref evitez les lignes de + de 3 pipes

    surtout quand la solution avec une toute simple regexp de recherche suffit.

    qd on commence à travailler en regexp on devient très vite expert unix...tellement ça simplifie tout....

  6. #6
    Membre éclairé

    Inscrit en
    Août 2007
    Messages
    308
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 308
    Billets dans le blog
    1
    Par défaut
    merci pour ta réponse frp31, mais cette commande ne résoud pas mon probléme.
    au fait, peut-etre que je n'etais pas claire dans mes explications mais j'ai besoin de récupérer meme les lignes qui contiennent les valeurs 80 et 82 mais pas nécessairement aprés la virgule directement
    donc sur ton exemple, j'ai besoin de récuperer aussi la ligne
    43 57 70 73 , 29 59 80 : 11

    que ta commande n'extrait pas

  7. #7
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Par défaut
    j'avais pas compris justement je croyait que tu le voulais explicitement immédiatement après la virgule ..

    mais suffit de changer la requette en :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -n '/,.*\ 8[02]\ /p' fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    XS1:root #sed -n '/,.*\ 8[0,2]\ /p' test  
    43 57 70 73 , 29 59 80 : 11
    55 34 60 , 80 76 43 : 10
    33 22 11 , 82 32 88 : 22
    XS1:root #rm test

  8. #8
    Membre éclairé

    Inscrit en
    Août 2007
    Messages
    308
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 308
    Billets dans le blog
    1
    Par défaut
    Merci à vous deux

  9. #9
    Membre éclairé

    Inscrit en
    Août 2007
    Messages
    308
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 308
    Billets dans le blog
    1
    Par défaut
    merci mais comme je suis vraiment débutante en linux
    est ce que tu pourrais m'expliquer la commande exactement
    par exemple le . et le /p que je ne comprends pas
    merci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sed -n '/,.*\ 8[02]\ /p' fichier

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

Discussions similaires

  1. Extraction de lignes
    Par francky159 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 22/11/2007, 23h47
  2. [regex]extraction de lignes
    Par afrikha dans le forum Collection et Stream
    Réponses: 8
    Dernier message: 15/09/2006, 12h46
  3. requête extraction dernière ligne table
    Par COLOMBAT dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 06/06/2006, 09h57
  4. Réponses: 52
    Dernier message: 23/05/2006, 11h08
  5. Extraction de ligne identique
    Par sacados1 dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 31/12/2005, 10h24

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