Armazenando valores mostrados na tela do terminal

2

Eu uso um software chamado Gromacs. Eu uso o comando:

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

para calcular e imprimir meus resultados no terminal. Aqui está uma captura de tela:

Eu quero armazenar os valores de DG em diferentes variáveis ou em uma matriz.Estes resultados sempre começam com o Lambda. Eu quero armazenar valores de DG porque estou escrevendo um programa, que imprime informações relacionadas a todos os intervalos de lambda.

Então meu programa imprime

    Lambda_Range = 0-0.05  distance= XXX   force = XXX 

Eu também quero imprimir valores de DG com isso

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

A única ideia que consigo pensar é que, se eu conseguir armazenar de alguma forma os valores de DG no array ou nas variáveis. Eu acho que então eu posso conseguir o que eu quero.

É possível fazer isso?

    
por Vikas Dubey 11.09.2015 / 13:53

1 resposta

2

Você pode processar a saída usando sed e usar bash domapfile incorporado para ler a saída em uma matriz:

mapfile -t a < <(g_bar -f md*.xvg -o -oi -oh | sed '/lambda/s/.*DG *//')
  • -t : remove a nova linha à direita de cada linha de entrada antes de lê-la na matriz
  • a : o nome da matriz
  • < <(g_bar -f md*.xvg -o -oi -oh | sed '/lambda/s/.*DG *//') : redireciona a saída da substituição do processo executando g_bar -f md*.xvg -o -oi -oh | sed '/lambda/s/.*DG *//' para mapfile ' stdin

Desta forma, cada resultado será armazenado no array $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
    
por kos 11.09.2015 / 14:35