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 :

Tester une variable égale au point d'exclamation


Sujet :

Shell et commandes GNU

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 162
    Points : 66
    Points
    66
    Par défaut Tester une variable égale au point d'exclamation
    Bonjour,

    Je veux récupérer des chaînes de caractère à un endroit bien précis à l'aide d'un script bash
    Le document ressemble à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ---------
    ! var1 valeur1
    ! var2 valeur2
    ! var3 valeur3
    ----------
    J'ai donc penser faire une boucle de la ligne 2 à la ligne n et pour savoir quand s’arrêter il suffit que le premier caractère ne soit pas un !


    d'où la commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for ((Ligne3 ; $(awk -v varx=$Ligne3 'NR==varx {print $1 }' $1)  -eq ! ;  Ligne3++))
            do
    Le problème c'est que ça marche pas puisque le point d'exclamation à une valeur logique.
    J'ai testé avec '!', "!" \! ....
    Mais rien n'y fait (j'ai sûrement pas tout testé) je pense que cela doit être possible mais malgré de recherche je n'ai pas trouvé comment faire le test sur le caractère et non ça valeur de négation à chaque fois j'ai le message opérateur mathématique non valable.
    Merci

  2. #2
    Membre habitué Avatar de Levi59
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2011
    Messages : 58
    Points : 148
    Points
    148
    Par défaut
    Normal puisque "-eq" est destiné aux test arithmétiques. Pour les tests de caractères, il faut utiliser "==".

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 162
    Points : 66
    Points
    66
    Par défaut
    Non ça ne marche pas j'ai testé les deux. En fait j'ai commencé par == et ça n'a pas marché.

  4. #4
    Expert éminent

    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
    Points : 6 276
    Points
    6 276
    Par défaut
    Salut,

    Citation Envoyé par Erlen Voir le message
    Je veux récupérer des chaînes de caractère à un endroit bien précis à l'aide d'un script bash
    Dis-nous plutôt exactement ce que tu veux récupérer (ou pas récupérer), comment tu veux le récupérer (tout, une partie) et ce que tu veux en faire.

    Peut-être que bash n'est pas la solution la plus appropriée...

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 162
    Points : 66
    Points
    66
    Par défaut
    Alors j'ai dans un ficher .out écrit une fois les paramètres et leurs valeurs après optimisation.
    Je veux récupérer les valeurs des paramètres pour les ré-injecter dans un nouvel input.

    Comme le nombre de mes paramètres est variable je veux pouvoir les récupérer dans un cas général.
    Je connais une pattern qui n'apparait qu'une fois 5 lignes au dessus du debut des paramètres.

    Comme il est précisé dans l'exemple, le premier caractère de la ligne est un point d'exclamation. Une fois la liste des paramètres écrites il y a une ligne de tiret.
    Je veux que la boucle récupère $2 et $3 tant que $1 est un point d'exclamation.
    D’où le test sur le point d'exclamation.

  6. #6
    Expert éminent

    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
    Points : 6 276
    Points
    6 276
    Par défaut
    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
    $ cat plop 
    blablabla
    bla bla bla
    bla
    ---------
    ! var1 valeur1
    ! var2 valeur2
    ! var3 valeur3
    ----------
    blablabla
    bla bla bla
    bla
     
    $ sed -n '/^--*/{:z;n;/^!/{s/[^ ]* //p;bz}}' plop 
    var1 valeur1
    var2 valeur2
    var3 valeur3
     
    $
    Après, à défaut d'un exemple concret, il faudra sûrement adapter par rapport à Je connais une pattern qui n'apparait qu'une fois 5 lignes au dessus du debut des paramètres.


  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 162
    Points : 66
    Points
    66
    Par défaut
    Mais avec cette méthode comment je sais quand je dois arreter la boucle ? La je faisais ca au moyen du test sur le point d'exclamation. Je pense que si je fais le test logique sur le tiret le problème sera le même.

    Il n'y a donc aucune méthode pour comparer un caractère au point d'exclamation ?

  8. #8
    Expert éminent

    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
    Points : 6 276
    Points
    6 276
    Par défaut
    Le test s'effectue avec /^!/ dans ma syntaxe.

    Après comme je te l'ai dit, il nous faudrait un exemple plus concret pour ajuster la syntaxe au millimètre près

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 162
    Points : 66
    Points
    66
    Par défaut
    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
    #!/bin/bash
     
     
    ###############
    #se placer dans le dossier contenant le fichier screen a sousmettre
    ##############
     
     
    for arg in $1
    do
    fichier=$1
     
    Ligne=`grep -n "Optimized Parameters" $fichier` #recuperation de la ligne contenant l iteration 
    Ligne2=""$(sed 's/[^[:digit:]]//g' <<< "$Ligne")"" #recuperation du numero de la ligne ld double "" permet d'avoir la valeur numérique et pas la chaine de caractère
    Ligne3=$((Ligne2 + 5))  #calcul de la valeur de la première ligne des variables a recuperer !
    echo $Ligne3
    Lignestart=$Ligne3
    echo $Lignestart
     
     
    	for ((Ligne3 ; $(awk -v varx=$Ligne3 'NR==varx {print $1 }' $1)  == '!' ;  Ligne3++))
    	do
    	variable[$Ligne3]=$(awk -v varx=$Ligne3 'NR==varx {print $2 }' $1)
    	valeur[$Ligne3]=$(awk -v varx=$Ligne3 'NR==varx {print $3 }' $1)
     
    	done
     
    	for ((Lignestart ; $Lignestart <= $Ligne3; Lignestart++))
    	do
    	echo "${variable[$Lignestart]} "
    	echo "${valeur[$Lignestart]}"
    	done
    done
    exemple de fichier a traiter :

    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
                           ----------------------------
                           !   Optimized Parameters   !
                           ! (Angstroms and Degrees)  !
     ----------------------                            ----------------------
     !      Name          Value   Derivative information (Atomic Units)     !
     ------------------------------------------------------------------------
     !       oc2         1.3916   -DE/DX =    0.0001                        !
     !       po3         1.7943   -DE/DX =    0.0                           !
     !      poc3       115.0819   -DE/DX =    0.0                           !
     !       op4         1.5398   -DE/DX =    0.0                           !
     !      opo4       100.67     -DE/DX =    0.0                           !
     !      dih4       180.0      -DE/DX =    0.0                           !
     !       op5         1.5485   -DE/DX =    0.0                           !
     !      opo5       102.861    -DE/DX =    0.0                           !
      ------------------------------------------------------------------------
     GradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGrad
    Donc Je récupère les variables et leur valeurs 5 lignes après optimized parameter
    et ce tant que la ligne commence par un point d'exclamation
    Normalement on sort de la boucle quand $1 == -

  10. #10
    Expert éminent

    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
    Points : 6 276
    Points
    6 276
    Par défaut
    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
    $ cat brol 
                           ----------------------------
                           !   Optimized Parameters   !
                           ! (Angstroms and Degrees)  !
     ----------------------                            ----------------------
     !      Name          Value   Derivative information (Atomic Units)     !
     ------------------------------------------------------------------------
     !       oc2         1.3916   -DE/DX =    0.0001                        !
     !       po3         1.7943   -DE/DX =    0.0                           !
     !      poc3       115.0819   -DE/DX =    0.0                           !
     !       op4         1.5398   -DE/DX =    0.0                           !
     !      opo4       100.67     -DE/DX =    0.0                           !
     !      dih4       180.0      -DE/DX =    0.0                           !
     !       op5         1.5485   -DE/DX =    0.0                           !
     !      opo5       102.861    -DE/DX =    0.0                           !
     ------------------------------------------------------------------------
     GradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGrad
     
    $ awk '/Parameters/,/^ !.*Name/ {next}  /^ !/ { print $2,$3 }' brol 
    oc2 1.3916
    po3 1.7943
    poc3 115.0819
    op4 1.5398
    opo4 100.67
    dih4 180.0
    op5 1.5485
    opo5 102.861
     
    $

Discussions similaires

  1. Réponses: 2
    Dernier message: 09/09/2006, 22h08
  2. tester une variable
    Par NeHuS dans le forum ASP
    Réponses: 2
    Dernier message: 17/02/2006, 16h38
  3. [coldfusion] Tester une variable
    Par mandaillou dans le forum Coldfusion
    Réponses: 1
    Dernier message: 29/09/2005, 12h04
  4. Tester une variable
    Par ZiT dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 18/07/2005, 15h49
  5. NASM Tester une variable d'environnement à la "compilat
    Par Pierre Maurette dans le forum Assembleur
    Réponses: 1
    Dernier message: 10/06/2005, 14h27

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