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

Linux Discussion :

[Shell - bash/ksh] Decoupe d'une chaine de caractère


Sujet :

Linux

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 35
    Points : 19
    Points
    19
    Par défaut [Shell - bash/ksh] Decoupe d'une chaine de caractère
    Bonjour,


    Je parcours un fichier et à chaque ligne il faut que je découpe la chaine de caractère rencontrée (en me basant sur "_") en ne gardant que l'avant dernière occurrence.

    Voila les datas du fichiers :

    TOTO1_TOTO2_pub (soit TOTO2)
    TUTU1_TUTU2_TUTU3_pub (soit TUTU3)
    TATA1_TATA2_pub (soit TATA2)
    TOTO1_TOTO2_TOTO3_TOTO4_pub (soit TOTO4)
    ...

    La longueur des chaines varient toujours, le seul point commun à chacune étant "_pub".


    J'ai essayé avec du sed et des regexp mais je ne maitrise pas vraiment


    Merci d'avance!

  2. #2
    Expert éminent
    Avatar de kdmbella
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2010
    Messages
    799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2010
    Messages : 799
    Points : 7 038
    Points
    7 038
    Par défaut
    je sais pas quel langage tu utilises mais tu peut passer par fonction split("_",$tachaine) ça te retourne un tableau; ensuite tu comptes le nombre d'élément de ton tableau via une fonction count() ou équivelent et ensuite tu récupère le l'avant dernier élément de ton tableau

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #ce code c'est du php 
    $valeur ; // la valeur que tu cherche à récupérer
    $tachaine; //représente une ligne de ton fichier 
    $tab = split("_",$tachaine); //$tab est un tableau 
    $nb = count($tab);//le nombre délément de ton tableau 
     
    $valeur = $tab[$nb-2];// $n-2 étant l'indice de l'avant dernier élément de ton tableau
    j'espère avoir répondu a ta question

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 35
    Points : 19
    Points
    19
    Par défaut
    Merci de ta réponse mais j'ai oublié de préciser qu'il s'agit de SHELL UNIX (bash, ksh).

  4. #4
    Membre averti Avatar de fransoo
    Inscrit en
    Novembre 2009
    Messages
    209
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 209
    Points : 300
    Points
    300
    Par défaut
    Là le must c'est awk :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk -F'_' '{print $(NF-1)}' nom_fichier
    et hop !

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Octobre 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Octobre 2011
    Messages : 21
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par fransoo Voir le message
    Là le must c'est awk :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk -F'_' '{print $(NF-1)}' nom_fichier
    et hop !
    Je me permets de rebondir sur ce message. J'ai besoin de faire à peu près la même chose à savoir : récupérer une partie de la chaîne entre 2 caractères précis, par exemple :
    2011-10-22 15:09:35 : INFO : [session1] succeeded

    Je veux récupérer ce qui est entre les crochets, donc session1 dans mon exemple. J'arrive bien à récupérer les positions avec awk et index mais je ne parviens pas ensuite à utiliser ces valeurs pour découper la chaîne. Je fais peut être fausse route...
    awk '{ print $1, index($0, "[")}' log.txt
    --> me retourne la position du caractère "["

    Merci de votre aide !

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 589
    Points : 19 474
    Points
    19 474
    Par défaut
    Bonjour,

    à moins que tu aies autre chose à faire avec les lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk '{ sub(".*\\[",""); sub("].*",""); print $0}' ton_fichier
    ...
    ?

    Tutoriels awk : ici
    la documentation officielle

  7. #7
    Membre averti Avatar de fransoo
    Inscrit en
    Novembre 2009
    Messages
    209
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 209
    Points : 300
    Points
    300
    Par défaut
    NOTA: s'il y a une seule expression entre crochets !
    Une solution avec grep (mais qui conserve les crochets)ou une autre avec sed (qui supprime les crochets)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed 's/.*\[//;s/\].*//'
    ou via l'expansion de paramètres bash (si c'est sur une variable)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    A="2011-10-22 15:09:35 : INFO : [session1] succeeded"
    B=${A#*[}
    B=${B%]*}

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Octobre 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Octobre 2011
    Messages : 21
    Points : 8
    Points
    8
    Par défaut
    Merci pour vos réponses fransoo et N_BaH, je vais voir laquelle je choisis.

Discussions similaires

  1. Bash - Découper une chaine de caractères
    Par nicolas.pissard dans le forum Shell et commandes GNU
    Réponses: 13
    Dernier message: 16/12/2014, 13h18
  2. decouper une chaine de caractère
    Par vileb29 dans le forum Langage
    Réponses: 6
    Dernier message: 30/08/2007, 13h50
  3. Réponses: 6
    Dernier message: 14/08/2007, 16h44
  4. decouper une chaine de caractères
    Par MATH_03 dans le forum Access
    Réponses: 3
    Dernier message: 14/12/2006, 01h11
  5. [Tableaux] decouper une chaine de caractères
    Par pekka77 dans le forum Langage
    Réponses: 12
    Dernier message: 03/12/2005, 19h08

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