Хранение значений, показанных на терминальном экране

Я использую программное обеспечение под названием Gromacs. Я использую команду:

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

вычислить и распечатать мои результаты в терминале. Вот снимок экрана:

enter image description here

Я хочу сохранить Значения DG в различных переменных или в массиве. Эти результаты всегда запускаются с Лямбды. Я хочу сохранить значения DG, потому что я пишу программу, которая печатает информацию, связанную с для всех диапазонов лямбды.

Так моя печать программы

    Lambda_Range = 0-0.05  distance= XXX   force = XXX 

Я также хочу Распечатать значения DG с этим

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

Только идея, я могу думать, является этим, если я могу так или иначе сохранить значения DG в массиве или в переменных. Я предполагаю затем, что я могу достигнуть того, что я хочу.

Действительно ли возможно сделать это?

2
задан 11 September 2015 в 15:22

1 ответ

Можно обработать выходное использование sed и используйте bash mapfile встроенный для чтения вывода в массив:

mapfile -t a < <(g_bar -f md*.xvg -o -oi -oh | sed '/lambda/s/.*DG *//')
  • -t: удаляет запаздывающую новую строку из каждой строки входа прежде, чем считать его в массив
  • a: название массива
  • < <(g_bar -f md*.xvg -o -oi -oh | sed '/lambda/s/.*DG *//'): перенаправляет вывод выполнения замены процесса g_bar -f md*.xvg -o -oi -oh | sed '/lambda/s/.*DG *//' кому: mapfile stdin

Таким образом, каждый результат будет сохранен в массиве $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
2
ответ дан 2 December 2019 в 03:52

Другие вопросы по тегам:

Похожие вопросы: