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 :

Récupération valeur colonne, application commande [Débutant(e)]


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti Avatar de FryHandiz
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 26
    Par défaut Récupération valeur colonne, application commande
    Bonjour,

    Alors voilà, je rencontre un petit souci. En effet, voici un exemple de mon fichier à traiter.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    chr01   1045    1059    1
    chr01   2820    2898    2
    chr01   2840    2900    2
    chr01   2900    3000    2
    chr01   3000    3898    2
    chr01   20836   20838   3
    chr01   23314   23323   4
    Je souhaite, selon les valeurs de la quatrième colonne, récupérer les lignes dans un autre fichier.
    En gros, pour le 1, bah j'ai qu'une ligne, hop, dans un nouveau fichier.
    Pour le 2, j'ai 4 lignes, hop, elles se retrouvent dans un autre fichier.

    Auriez-vous un conseil à me donner ? Une piste ?
    Au début, étant partisane du moindre effort, j'ai voulu partir sur quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -w -F'\t' -ane 'print if sprintf ("%u", $F[3]) == 2' > nouveauFichier
    Sauf que ça m'oblige à taper à chaque fois la valeur... Sachant que ça va à peu près jusque 600 et que ce n'est pas linéaire (en gros, il peut manger les 11, 14, 200, etc). Je pense donc être obligée de faire un script et... Je vous remercie d'avance pour vos conseils !

  2. #2
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    c'est selon la valeur de la dernière colonne que tu veux faire la ventilation, ou selon le nombre de fois où cette valeur apparaît?
    Deuxième question: est-ce que tes fichier en sortie peuvent tous avoir le même nom avec juste un numéro qui change?

    J'ai une bonne idée de comment faire, mais j'aimerais avoir d'abord les réponses à ces questions pour être sûr que ça corresponde à tes besoins.

  3. #3
    Membre averti Avatar de FryHandiz
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 26
    Par défaut
    Je ne comprends pas trop le terme de ventilation, mais je veux bien regrouper mes lignes selon le numéro de la quatrième colonne. Tous les 2 ensemble, tous les 4 ensemble, etc.
    Pour le titre, le mieux serait qu'on retrouve le numéro en question. Genre si on regroupe tous les 2, voir le 2 dans le titre, tous les 123, voir 123 dans le titre, etc.
    Je ne sais pas si je suis très claire :S

    Mais merci d'avance pour ton aide !

  4. #4
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Billets dans le blog
    1
    Par défaut
    Ventilation, c'est dans ce cas un autre mot pour répartition.

    Ton besoin est maintenant bien clair, je te prépare un pour de code et reviens.

  5. #5
    Membre averti Avatar de FryHandiz
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 26
    Par défaut
    Ok super !
    Je te montre ce que j'ai essayé ce matin qui est assez nul mais bon xD
    Voici le script :
    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
    17
    18
    19
    20
    #!/ usr/bin/env perl
     
    use strict;
     
    if ($#ARGV != 1)
    {
        die "\n\tUsage : nbSupport FileName\n\n";
    }
     
    my $support = $ARGV[0]; open C, "<$ARGV[1]" or die "Impossible ouvrir le fichier de cluster";
    while (my $ligne = <C>) 
    {
        my @tab = split /\s/, $ligne; 
        if ($support==$tab[3])
        {
            print $ligne;
        }
    }
     
    close C;
    Et je le lançais comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for i in `seq 1 156`; do perl /home/lhelou/script/scriptPerl/countCouv.pl $i > bedParCouv/sup$i.bed; done
    Un des problèmes, en plus de ne pas être très intelligent, hum, c'est que ça m'a créé pleiiins de fichiers vides, et que c'est pas facile du tout de s'y retrouver.
    Vu qu'il me le lançait pour des valeurs de 1 à 156 sans savoir si par exemple le 5 existait ou non.
    Je sais pas si je suis claire...
    En tout cas, merci d'avance !

  6. #6
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Billets dans le blog
    1
    Par défaut
    Re-bonjour,

    voici un script qui ne crée que les fichiers nécessaires (pas de fichiers vides).

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    use strict;
    use warnings;
     
    my %FH; # hachage de file handles
     
    while (my $line = <DATA>) {
    	chomp $line;
    	my $id = $1 if $line =~ /(\d+)$/;
    	create_file($id) unless exists $FH{$id};  # ouverture du fichier s'il n'existe pas
    	print {$FH{$id}} "$line\n";
    }
    close $_ for values %FH;
     
    sub create_file {
    	my $id = shift;
    	my $file_out = "resultat_$id.txt";
    	open my $FH_OUT, ">", $file_out or die "Ouverture impossible de $file_out $!";
    	$FH{$id} = $FH_OUT;
    }
     
    __DATA__
    chr01   1045    1059    1
    chr01   2820    2898    2
    chr01   2840    2900    2
    chr01   2900    3000    2
    chr01   3000    3898    2
    chr01   20836   20838   3
    chr01   23314   23323   4
    chr01   23315   23325 600
    Les données utilisées pour le test sont dans la section __DATA__ à la fin du script. Tu dois remplacer par l'ouverture de ton vrai fichier en entrée.

    Ce script me crée les fichiers suivants:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $ls -lrt res*
    -rw-r--r-- 1 prod dqd  26 2016-05-18 10:42 resultat_3.txt
    -rw-r--r-- 1 prod dqd 104 2016-05-18 10:42 resultat_2.txt
    -rw-r--r-- 1 prod dqd  26 2016-05-18 10:42 resultat_1.txt
    -rw-r--r-- 1 prod dqd  26 2016-05-18 10:42 resultat_600.txt
    -rw-r--r-- 1 prod dqd  26 2016-05-18 10:42 resultat_4.txt
    Et les fichiers contiennent bien les données attendues. Par exemple resultat2.txt:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $cat resultat_2.txt
    chr01   2820    2898    2
    chr01   2840    2900    2
    chr01   2900    3000    2
    chr01   3000    3898    2
    A ta disposition pour expliquer ce que tu ne comprendrais pas bien.

    Bonne journée,
    Laurent.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 15/07/2013, 21h39
  2. [XL-2002] Macro recherche valeur colonne+application formule
    Par help_2008 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 22/04/2009, 13h44
  3. [Débutant][JSP]Récupération valeur de checkbox
    Par Crazyblinkgirl dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 01/09/2004, 09h16
  4. récupération valeur id auto incrément
    Par Jovial dans le forum Requêtes
    Réponses: 2
    Dernier message: 31/08/2004, 08h56
  5. Récupération valeur d'une propriété type TStrings
    Par Stéphane Vaillant dans le forum Langage
    Réponses: 2
    Dernier message: 01/03/2003, 11h47

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