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 :

Convertir le nom du fichier csv en variable


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2011
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Juillet 2011
    Messages : 63
    Par défaut Convertir le nom du fichier csv en variable
    Salut a tous,

    Je doit écrire un script pour analyser les données que j 'obtient depusi un simulateur.
    Les fichiers a analyser ont comme noms:
    VAR1_VAR2_VAR3_VAR4.csv , VAR{1,..,4} sont les variable que je change durant la simulation.

    L'analyse des données ce fait en fixant un prametere (VAR{1,..,4})ou en variant d'autres et voir le changement.

    J'ai crée un script pour faire cela , mais j 'ai pas pu convertir le nom des fichiers en variable pour les utiliser dans une boucle.

    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
     
     
    #!/bin/bash          
     
    awk -F "," '
     
    BEGIN {
     
    print"=================================================================================================="
     
    printf"%-18s %-18s %-18s %-18s %-18s  \n","Network size", "P_Energy", "E_Energy", "All_energy","Latency"
     
    print"=================================================================================================="
    }
     
     
    #----- tous les fichiers on la même structure, je pointe directe sur la ligne et le colonne requise #
     NR==3 {printf "%-20s", $1 } NR==25 {printf "%-20s", $2 }  NR==12 {printf "%-20s", $2 } NR==29 {printf "%-20s", $2 } NR==49 {printf "%-20s", $4 } ' VAR1_VAR2_VAR3_VAR4.csv
    Avec ce code j'ai deux problèmes:
    1- même si met le fichier a analyser " *csv " j'obtient toujours une seule ligne, comme si il y a une seule itération.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ==================================================================================================
    Network size       P_Energy           E_Energy           All_energy         Latency             
    ==================================================================================================
         VAR1            0.0402597           0.00767312          0.0479328           0.294311
    2- VAR1 dans ce tableau c'est juste pour démonstration, je cherche comment extraire VAR1 du nom des fichiers et l'utiliser dans une boucle comme ça j'aurais un tableau comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
     
     
    ==================================================================================================
    Network size       P_Energy           E_Energy           All_energy         Latency             
    ==================================================================================================
             VAR1=2           0.0402597           0.00767312          0.0479328           0.294311    
     
            VAR1=4              xxxxxxx                xxxxxxx             xxxxxxx           xxxxxxxx     
     
           VAR1=6              xxxxxxx                xxxxxxxxx          xxxxxxxx          xxxxxxxx
    Merci d'avance !

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

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

    c'est pas clair.
    il nous faut des exemples d'entrées, et la sortie correspondante.

    dans awk, le nom du fichier en cours de traitement est dans la variable FILENAME.
    tu peux la dupliquer, puis traiter cette "copie" comme n'importe quelle autre variable : rechercher une sous-chaîne, la splitter en tableau...
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 288
    Par défaut
    Bonjour

    De plus, tu confonds NR et FNR. Le premier s'incrémente sur la totalité des fichiers. Le second se remet à 0 entre chaque fichier.
    Tes tests ne devraient pas être sur NR==29 mais FNR==29.

  4. #4
    Membre confirmé
    Inscrit en
    Juillet 2011
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Juillet 2011
    Messages : 63
    Par défaut
    Merci N_BaH et Flodelarab

    Le premier problème est résolu en utilisant FNR.

    Je pense que je doit m 'expliquer d 'avantage , je suis a mon premier script et je confond beaucoup de choses.

    Voici un exemple de noms de fichiers que je doit analyser

    P-Mesh__bitreverse_512_1E-3_8.csv
    P-Mesh__bitreverse_512_1E-3_6.csv
    P-Mesh__bitreverse_512_1E-3_4.csv
    P-Mesh__bitreverse_512_1E-3_2.csv

    Entre chaque underscore c'est un paramétré et chaque paramètre peut avoir plusieurs valeurs. Dans cet example c'est le dernier paramètre qui change (8,6,4,2).

    Avec ce script j'ai pu afficher les valeurs que je veux pour ces 4 fichiers avec:

    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
     
    awk -F "," '
     
    BEGIN {
     
    print"======================================================================================"
     
    printf"%-18s %-18s %-18s %-18s %-18s  \n","Network size", "P_Energy", "E_Energy", "All_energy","Latency"
     
    print"==========================================================================================="
    }
     
     
     
    FNR==3 {printf "%-40s", $1 }
    FNR==25 {printf "%-40s", $2 }  
    FNR==12 {printf "%-20s", $2 }
     FNR==29 {printf "%-20s", $2 }
     FNR==49 {printf "%-20s\n\n", $4 } ' P-Mesh__bitreverse_512_1E-3_*.csv
    j'obtient:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    ============================================================================== 
    Network size       P_Energy           E_Energy           All_energy         Latency             
    ==============================================================================
                        0.0402769           0.00717636          0.0474533           0.270184            
     
                        0.00251908          0.000448221         0.0029673           0.195813            
     
                        0.0100774           0.00179444          0.0118718           0.215137
    J'ai mis une valeur fausse pour Network size " FNR==3 {printf "%-40s", $1 } ".
    Ce que je veux c'est de remplir la première colonne par les différentes valeurs du
    paramètre que je fixe, dans l’exemple ci dessous {8,6,4,2}.
    Donc je demande si je peux construire une loupe qui suivant le nombre de paramètres que je change j'aurais plusieurs tableaux.
    EXEMPLE:
    si je fixe paramètre 1 qui a 2 valeurs et paramètre 2 qui a 2 valeur je doit obtenir 4 tableaux.
    ou la première colonne est l’itération en cours.

    Merci d'avance pour votre aide.

  5. #5
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 288
    Par défaut
    N_Bah t'a répondu. Voici un exemple de console:

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    $ ls *.csv
    P-Mesh__bitreverse_512_1E-3_1.csv  P-Mesh__bitreverse_512_1E-3_2.csv  P-Mesh__bitreverse_512_1E-3_4.csv  P-Mesh__bitreverse_512_1E-3_8.csv
    $ awk 'FNR==1{nb_param=split(FILENAME,param,"[_.]");print nb_param" param:";for (i=1;i<=nb_param;i++) print param[i];print ""}' *.csv
    7 param:
    P-Mesh
     
    bitreverse
    512
    1E-3
    1
    csv
     
    7 param:
    P-Mesh
     
    bitreverse
    512
    1E-3
    2
    csv
     
    7 param:
    P-Mesh
     
    bitreverse
    512
    1E-3
    4
    csv
     
    7 param:
    P-Mesh
     
    bitreverse
    512
    1E-3
    8
    csv
     
    $
    Ton paramètre à mettre en première colonne est param[6] dans mon exemple.

  6. #6
    Membre confirmé
    Inscrit en
    Juillet 2011
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Juillet 2011
    Messages : 63
    Par défaut
    Merci Flodelarab
    Avec ton code je vais avoir chaque ligne tous les paramètres affichées.
    alors que je doit avoir seulement les différentes valeurs du paramètres qui changent.
    Par exemple quand je j'applique le script a "P-Mesh_bitreverse_512_1E-3_*.csv",
    Il y a 4 fichiers qui corresponde, donc je doit avoir un tableau de 4 lignes
    avec la première colonne les différentes valeur de "*" qui sont 2,4,6,8.

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

Discussions similaires

  1. [load] Nom de fichier dans une variable
    Par captaine93 dans le forum MATLAB
    Réponses: 6
    Dernier message: 20/09/2009, 12h55
  2. SSIS Nom de fichier converti en variable
    Par bridaine dans le forum SSIS
    Réponses: 1
    Dernier message: 09/06/2009, 14h59
  3. [ODI] convertir un nom de fichier en dos
    Par laTayour dans le forum Alimentation
    Réponses: 0
    Dernier message: 16/01/2008, 15h10
  4. Réponses: 9
    Dernier message: 06/03/2007, 10h56
  5. Shell: récupérer le bon nom de fichier dans une variable
    Par claralavraie dans le forum Linux
    Réponses: 1
    Dernier message: 10/01/2006, 11h45

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