Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 28/02/2012, à 15:49

jbbaudouin

script bash récupérer variable dans une ligne

Bonjour à tous,

Je voudrais écrire un script bash qui me permettent de récupérer une variable et ce récursivement
contenu dans une ligne.
Le fichier à analyser se décrit de la manière suivante :

entier1
entier2
atome1 x1 y1 z1 n1
atome2 x2 y2 z2 n2
atome3 x3 y3 z3 n3
...
entier3
entier4
atome4 x4 y4 z4 n4
...

donc ici voudrais récupérer entier1 et entier 3, de tel sorte que i=entier1, puis i=entier3.

Je vous remercie par avance pour vos réponses,

jbbaudouin

Hors ligne

#2 Le 28/02/2012, à 16:16

sputnick

Re : script bash récupérer variable dans une ligne

Est-ce que les motifs sont répétitifs et stables à l'infini ?
Peux tu donner un exemple reel ?


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#3 Le 28/02/2012, à 16:20

jbbaudouin

Re : script bash récupérer variable dans une ligne

les motifs sont répétitifs à l'infini de tel sorte que
entier1 et entier3 correspondent aux nombres d'atomes
contenu dans la frame qui suit

en espérant que cela t'as aidé,

jbbaudouin

Hors ligne

#4 Le 28/02/2012, à 16:42

jbbaudouin

Re : script bash récupérer variable dans une ligne

ok c'est bon j'ai trouvé, ça vas être quelque chose du genre :

var=`sed -n 1p test_shear.xyz`
echo $var
var=`expr $var + 3`
echo $var

jbbaudouin

Hors ligne

#5 Le 28/02/2012, à 16:52

sputnick

Re : script bash récupérer variable dans une ligne

Edite tes messages avec la balise

code

stp ! (le bouton avec les chevrons)

Et toujours aucune information sur le contexte, ni d'exemple concret. De quel genre de frames parle tu ?

Dernière modification par sputnick (Le 28/02/2012, à 16:53)


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#6 Le 28/02/2012, à 17:09

jbbaudouin

Re : script bash récupérer variable dans une ligne

désolé pour la balise c'est un oubli
pour les frames, le fichier en question est une succession de séries de coordonnées atomiques
qui permettent de visualiser l'évolution d'une structure atomique.

Hors ligne

#7 Le 28/02/2012, à 17:15

sputnick

Re : script bash récupérer variable dans une ligne

Trop vague ton truc. DONNE UN EXEMPLE REEL STP ! (bis)

Et les messages ne sont toujours pas édités avec la balise

code

tudjuuu !!!

Dernière modification par sputnick (Le 28/02/2012, à 17:15)


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#8 Le 28/02/2012, à 17:18

jbbaudouin

Re : script bash récupérer variable dans une ligne

je compléte mon premier exemple de tout à l'heure :

entier1
entier2
atome1 x1 y1 z1 n1
atome2 x2 y2 z2 n2
atome3 x3 y3 z3 n3
...
entier3
entier4
atome4 x4 y4 z4 n4
atome5 x5 y5 z5 n5
atome6 x6 y6 z6 n6
...
entier5
entier6
atome7 x7 y7 z7 n7
atome8 x8 y8 z8 n8
...

Hors ligne

#9 Le 28/02/2012, à 17:20

sputnick

Re : script bash récupérer variable dans une ligne

La balise code, c'est trop dur ???

Dans ton fichier, il y a VRAIMENT marqué entierN ?

Et donc tu cherches à recuperer entierN à la première ligne ou après la ligne ... ?


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#10 Le 28/02/2012, à 17:22

jbbaudouin

Re : script bash récupérer variable dans une ligne

je vais essayé de mon côté d'abord et posterai le script si ça marche

jbbaudouin

Hors ligne

#11 Le 28/02/2012, à 17:25

sputnick

Re : script bash récupérer variable dans une ligne

De ce que j'en comprends :


$ cat FICHIER 
entier1
entier2
atome1 x1 y1 z1 n1
atome2 x2 y2 z2 n2
atome3 x3 y3 z3 n3
...
entier3
entier4
atome4 x4 y4 z4 n4
atome5 x5 y5 z5 n5
atome6 x6 y6 z6 n6
...
entier5
entier6
atome7 x7 y7 z7 n7
atome8 x8 y8 z8 n8

$ for i in $(awk 'NR==1{print} /^\.\.\./{getline;print}' FICHIER); do echo $i; done
entier1
entier3
entier5

On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#12 Le 28/02/2012, à 17:26

jbbaudouin

Re : script bash récupérer variable dans une ligne

oui c'est quelque chose comme ça

Hors ligne

#13 Le 28/02/2012, à 17:27

sputnick

Re : script bash récupérer variable dans une ligne

Super ta façon de ne jamais répondre aux questions, ca fait plaizir de passer du temps pour toi...


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#14 Le 28/02/2012, à 17:31

jbbaudouin

Re : script bash récupérer variable dans une ligne

désolé
mais c'est plus un problème d'itération que de commande shell
je vais t'expliquer
une frame se décompose de la manière suivante dans le fichier :

nbr atomes dans la frame (entier1)
nbr de pas (entier2)
liste d'atomes

le fichier étant une succesion de frames
le but final étant de sélectionner 1 frame sur 10 pour le raccourcir

jbaudouin

Hors ligne

#15 Le 28/02/2012, à 17:34

jbbaudouin

Re : script bash récupérer variable dans une ligne

petit ajout
l'entier2 varie de 1000 en 1000

Hors ligne

#16 Le 28/02/2012, à 17:34

jbbaudouin

Re : script bash récupérer variable dans une ligne

voilà il y a tout les données nécessaires
encore désolé

jbbaudouin

Hors ligne

#17 Le 01/03/2012, à 14:36

jbbaudouin

Re : script bash récupérer variable dans une ligne

voici le code bien sur il pourra toujours être amélioré,

#!/bin/bash
#script selection de 1 frame sur 10 d'un fichier anacoord
#boucle parcours fichier "xyz" et renvoie le nombre de ligne
#rm new_shear.xyz
i=1
k=1
# boucle qui lie le nombre de ligne
    while read line
     do
         i=`expr $i + 1`
     done < 100_shear.xyz
# boucle qui copie la premiere frame du fichier input
        var1=`sed -n "$k"p 100_shear.xyz`
        var1=`expr $var1 + 2`
  while [ $k -le $var1 ]
     do
        sed -n "$k"p 100_shear.xyz >> new_shear.xyz
        k=`expr $k + 1`
     done < 100_shear.xyz
       var2=10000
     k=`expr $k + 1`
# boucle qui selectionne la frame tous les "var2" pas
  while [ $k -le $i ]
     do
        nb_pas=`sed -n "$k"p 100_shear.xyz`
          if [ "$nb_pas" -eq "$var2" ]
                then
                  k=`expr $k - 1`
                  var2=`expr $var2 + 10000`
                  var1=`sed -n "$k"p 100_shear.xyz`
                  var1=`expr $var1 + $k + 1`
                     while [ $k -le $var1 ]
                         do   
                           sed -n "$k"p 100_shear.xyz >> new_shear.xyz
                           k=`expr $k + 1`
                     done
                        k=`expr $k + 1`
                 else
               k=`expr $k - 1`                  
                  var1=`sed -n "$k"p 100_shear.xyz`
                  k=`expr $var1 + $k + 3`
          fi
  done      

exit

jbbaudouin

Hors ligne

#18 Le 01/03/2012, à 17:09

sputnick

Re : script bash récupérer variable dans une ligne

expr+``+[ ]+2012 = Beurk14.gif

Desabo.


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#19 Le 01/03/2012, à 20:33

jbbaudouin

Re : script bash récupérer variable dans une ligne

merci pour ta réponse sputnick

bonne soirée et a+

jbbaudouin

Hors ligne