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 + script


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Inscrit en
    Août 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 32
    Par défaut Filtre + script
    Bonjour à tous,

    Je galère sur un matching de données:

    J'essaie à partir d'une liste contenant:

    TMP_LISTE3
    0001
    0002
    0003
    0004
    ....

    de matcher avec les entrées de ce fichier:

    TMP_LISTE01
    9999999999999000199999
    9999999999999000299999
    9999999999999000499999

    je suis en ksh donc je code ceci:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    while read line 
    do
    echo $line
    awk '{var1=substr($0,14,4) ; if (var1 == $line ) { print $0;}}' >> ${TMP_LISTE4}
    done < ${TMP_LISTE3}
    J'ai essayé avant avec un grep, mais ça ne marche pas...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #grep '^.\{13\}${line}' ${TMP_LISTE01} >> ${TMP_LISTE4}
    avec fgrep je ne sais pas faire du positionnel sinon je fais juste

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fgrep -f ${TMP_LISTE3} ${TMP_LISTE01} > ${TMP_LISTE4}
    Si une âme charitable pouvait m'aider ?

    Merci.

  2. #2
    Expert confirmé

    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
    Par défaut
    Salut,

    La position est un facteur déterminant ou pas ?

    Sans quoi un simple fgrep -f TMP_LISTE3 TMP_LISTE01 devrait le faire

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 658
    Par défaut
    Bonjour,

    ni awk ni grep ne sont nécesaires pour tester une correspondance.
    par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var=abcdefghi
    if [[ $var =~ def ]]
    then echo OK
    else echo KO
    fi
    ça dépend peut-être des versions de ksh (que j'utilise peu, et uniquement sur GNU/Linux)
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  4. #4
    Expert confirmé

    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
    Par défaut
    Sinon...

    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
    $ cat fic1
    0001
    0002
    0003
    0005
     
    $ cat fic2
    9999999999999000199999
    9999999999999000299999
    9999999999999000499999
     
    $ while read line;do egrep ".{13}${line}" fic2;done < fic1
    9999999999999000199999
    9999999999999000299999
     
    $

  5. #5
    Membre averti
    Femme Profil pro
    Inscrit en
    Août 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 32
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    Bonjour,

    ni awk ni grep ne sont nécesaires pour tester une correspondance.
    par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var=abcdefghi
    if [[ $var =~ def ]]
    then echo OK
    else echo KO
    fi
    ça dépend peut-être des versions de ksh (que j'utilise peu, et uniquement sur GNU/Linux)
    Désolé, je ne vois pas trop comment utiliser cette syntaxe.

    Citation Envoyé par zipe31 Voir le message
    Salut,

    La position est un facteur déterminant ou pas ?

    Sans quoi un simple fgrep -f TMP_LISTE3 TMP_LISTE01 devrait le faire
    J'ai essayé mais ça me récupère des entrées qui ne m'intéresse pas, oui il faut absolument que ce soit positionnel.

    egrep, n'a pas l'air de fonctionner chez moi (je trouverai la raison bientôt..), j'utilise cette syntaxe de grep:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    grep '.^\{13\}[0][0][0][1]' fic2
    En faite si je pouvais récupérer ma variable éclaté sur plusieurs lors de ma boucle:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    echo $tmp 
    0001
     
    echo $tmp1
    0
    echo $tmp2
    0
    echo $tmp3
    0
    echo $tmp4
    1
    du coup c'est terminé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep '.^\{13\}[$tmp1][$tmp2][$tmp3][$tmp4]' fic2
    Je ne vois pas comment découper ma variable?

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 658
    Par défaut
    Désolé, je ne vois pas trop comment utiliser cette syntaxe.
    ±telle quelle

    en reprenant l'exemple de zipe31 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    while read line
    do while read line2
        do motif=".{13}${line2}"
          if [[ $line2 =~ $motif ]]
          then echo "$line2"
          fi
       done < fic2
    done < fic1
    mais bon , j'avais mal lu le contexte, et ça c'est juste pour avoir raison. na !

    En faite si je pouvais récupérer ma variable éclaté sur plusieurs lors de ma boucle:
    tu peux t'inspirer de ce qui a été dit ici
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Membre averti
    Femme Profil pro
    Inscrit en
    Août 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 32
    Par défaut
    Merci beaucoup à vous deux, je regarde ça demain et je vous redis ça !

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

Discussions similaires

  1. [Débutant] Je veux traduire un script genre filtre audio de ML en C#
    Par antony521 dans le forum MATLAB
    Réponses: 0
    Dernier message: 18/06/2015, 13h42
  2. Filtre dans le script de chargement
    Par StephBe dans le forum QlikView
    Réponses: 1
    Dernier message: 12/11/2012, 08h26
  3. Tableau croisé / Script / Filtre
    Par shintaa dans le forum BIRT
    Réponses: 10
    Dernier message: 07/03/2011, 17h20
  4. Script pour filtre avec un Range indeterminé
    Par Rashlack dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/12/2010, 17h15

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