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

Langage Perl Discussion :

[grep] commande spéciale


Sujet :

Langage Perl

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 161
    Points : 77
    Points
    77
    Par défaut [grep] commande spéciale
    Bonjour je sollicite votre aide après avoir casser ma tête pendant deux jour mais aucun résultat, ma question tout simplement je cherche une commande "grep" ou autre qui me sort juste la partie verte un num qui commence par "01" mais entre ";" seul (je veux pas toute la ligne en sortie) et pas répéter. je sais pas si c'est possible.




    200803212359;0111800111;;3
    200803212359;0111900200;;3
    200803212359;0111900364;;0
    200803212359;0111900266;0
    200803212359;0111900200;;8
    200803212359;0111904578;;8
    200803212359;0114900586;;2
    200803212359;0111900273;;6
    200803212359;0111900111;;9
    200803212359;0111900266;;1
    200803212359;0111900266;;9
    200803212359;0111900000;J;0

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 15
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par scolopendra Voir le message
    Bonjour je sollicite votre aide après avoir casser ma tête pendant deux jour mais aucun résultat, ma question tout simplement je cherche une commande "grep" ou autre qui me sort juste la partie verte un num qui commence par "01" mais entre ";" seul (je veux pas toute la ligne en sortie) et pas répéter. je sais pas si c'est possible.




    200803212359;0111800111;;3
    200803212359;0111900200;;3
    200803212359;0111900364;;0
    200803212359;0111900266;0
    200803212359;0111900200;;8
    200803212359;0111904578;;8
    200803212359;0114900586;;2
    200803212359;0111900273;;6
    200803212359;0111900111;;9
    200803212359;0111900266;;1
    200803212359;0111900266;;9
    200803212359;0111900000;J;0

    Tu veux absolument utiliser la commande GREP ou une autre solution te va ?
    Car moi, j'utiliser la fonction Split. Elle permet de découper une chaine à partir d'un caractère particulier... (chez toi, c'est le ; )
    Donc ca donnerai quelque chose comme ca :

    (Je suppose que tu sors tout ce bloc d'un fichier... )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #Ouverture du fichier en lecture
    open(FICHIER, "< c:\dossier\fichier.txt");
     
    #Lecture ligne par ligne sur le fichier
    while(defined($ligne= <FICHIER>))
    {
        #découpage de chaque ligne
        my @liste = split(/:/, $ligne);  # découpe ta chaine et stock les 4 parties dans le tableau (ou liste, c'est pareil)
     
         print(" Partie verte : $liste[1] \n"); # On prend la partie n°2 (le tableau commence à 0)
    }
    Voila, j'espère que ca va t'aider.
    Ciao

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 161
    Points : 77
    Points
    77
    Par défaut
    ça peut m'aider bien sure, merci, même si un grep facilitera la tache car j'ai plusieurs fichiers a traiter dans un repertoire parce que l'idée après c'est de reboucler sur cette liste, et pour chaque numéro de la colonne 1 créer un fichier num.txt et mettre ses traces dedans. je vais voir comment faire en se basant sur ton idée.

    merci

  4. #4
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    ces données sont dans des fichiers c'est ça?

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 161
    Points : 77
    Points
    77
    Par défaut
    Oui dans des fichiers dans un répertoire donné...

  6. #6
    Membre confirmé Avatar de iblis
    Inscrit en
    Janvier 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : Janvier 2007
    Messages : 510
    Points : 570
    Points
    570
    Par défaut
    Citation Envoyé par scolopendra
    car j'ai plusieurs fichiers a traiter dans un repertoire parce que l'idée après c'est de reboucler sur cette liste, et pour chaque numéro de la colonne 1 créer un fichier num.txt et mettre ses traces dedans.
    Si j'ai bien compris, tu veux pour chaque valeur du deuxième champs créer un fichier num.txt qui contiennent chacune des lignes où cette valeur apparaît. Et tu veux faire ce traitement pour une liste de fichiers.

    Voilà comment je ferais :
    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
    #!/usr/bin/perl
    use strict; use warnings;
     
    my %greens;
     
    while (<>) {
        my $code = (split /;/)[1];
        push @{$greens{$code}}, $_;
    }
     
    for my $filecode (keys %greens) {
        open my $fh, '>', $filecode . '.txt';
        print $fh @{$greens{$filecode}};
        close $fh;
    }
    Tu peux appeler le script sur une liste de fichiers, par ex.: ./myscript *.log

    Dans l'exemple que tu as donné 0111900200.txt contiendra :
    200803212359;0111900200;;3
    200803212359;0111900200;;8

    Dis si tu ne comprends pas le code.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 161
    Points : 77
    Points
    77
    Par défaut
    désolé pour le retard j'étais pas dispo, donc oui voila ct exactement ca, pour le code je le comprend bien, en fait j'ai fait le programme, mais ta solution et plus optimisé je vais la testé et je te dirais merci bcp et merci encore a tout le monde

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

Discussions similaires

  1. grep commande shell extraire plusieurs termes dans un fichier
    Par sab113 dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 01/03/2012, 20h11
  2. ls et grep commande
    Par mbajat dans le forum Shell et commandes POSIX
    Réponses: 1
    Dernier message: 15/09/2011, 13h58
  3. Ftp et commande spéciale
    Par punkoff dans le forum Réseau/Web
    Réponses: 0
    Dernier message: 11/03/2009, 19h54
  4. Grep et commandes UNIX
    Par romeo9423 dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 06/02/2006, 18h47
  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