2 votes

Mémorisation des valeurs affichées sur l'écran du terminal

J'utilise un logiciel appelé Gromacs. J'utilise la commande :

g_bar -f md*.xvg -o -oi -oh  

pour calculer et imprimer mes résultats dans le terminal. Voici une capture d'écran :

enter image description here

Je veux stocker les valeurs de la DG dans différentes variables ou dans un tableau, ces résultats commençant toujours par Lambda. Je veux stocker les valeurs DG parce que j'écris un programme qui imprime les informations relatives à toutes les plages lambda.

Donc mon programme imprime

    Lambda_Range = 0-0.05  distance= XXX   force = XXX 

Je veux aussi imprimer les valeurs de la DG avec cela

    Lambda_Range = 0-0.05  distance= XXX   force = XXX    DG = XXX

La seule idée à laquelle je peux penser est que si je suis capable de stocker les valeurs des DG dans un tableau ou dans des variables. Je suppose que je pourrais alors obtenir ce que je veux.

Est-ce possible de le faire ?

2voto

ieplugin Points 216

Vous pouvez traiter la sortie en utilisant sed et utiliser bash 's mapfile pour lire la sortie dans un tableau :

mapfile -t a < <(g_bar -f md*.xvg -o -oi -oh | sed '/lambda/s/.*DG *//')
  • -t : supprime le saut de ligne de chaque ligne d'entrée avant de la lire dans le tableau.
  • a : le nom du tableau
  • < <(g_bar -f md*.xvg -o -oi -oh | sed '/lambda/s/.*DG *//') : redirige la sortie de la substitution de processus en cours d'exécution g_bar -f md*.xvg -o -oi -oh | sed '/lambda/s/.*DG *//' a mapfile 's stdin

De cette façon, chaque résultat sera stocké dans le tableau $a .

ubuntu@ubuntu:~/tmp$ cat infile
lambda 0.000 - 0.000, DG -0.00 +/- 0.00
lambda 0.000 - 0.000, DG  0.01 +/- 0.09
lambda 0.000 - 0.000, DG -0.02 +/- 0.08
lambda 0.000 - 0.000, DG  0.03 +/- 0.07
lambda 0.000 - 0.000, DG -0.04 +/- 0.06
lambda 0.000 - 0.000, DG  0.05 +/- 0.05
lambda 0.000 - 0.000, DG -0.06 +/- 0.04
lambda 0.000 - 0.000, DG  0.07 +/- 0.03
lambda 0.000 - 0.000, DG -0.08 +/- 0.02
lambda 0.000 - 0.000, DG  0.09 +/- 0.01
ubuntu@ubuntu:~/tmp$ mapfile -t a < <(sed '/lambda/s/.*DG *//' infile)
ubuntu@ubuntu:~/tmp$ echo ${a[0]}
-0.00 +/- 0.00
ubuntu@ubuntu:~/tmp$ echo ${a[1]}
0.01 +/- 0.09
ubuntu@ubuntu:~/tmp$ echo ${a[2]}
-0.02 +/- 0.08
ubuntu@ubuntu:~/tmp$ for x in "${a[@]}"; do echo "$x"; done
-0.00 +/- 0.00
0.01 +/- 0.09
-0.02 +/- 0.08
0.03 +/- 0.07
-0.04 +/- 0.06
0.05 +/- 0.05
-0.06 +/- 0.04
0.07 +/- 0.03
-0.08 +/- 0.02
0.09 +/- 0.01

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X