Я использую программное обеспечение под названием Gromacs. Я использую команду:
g_bar -f md*.xvg -o -oi -oh
вычислить и распечатать мои результаты в терминале. Вот снимок экрана:
Я хочу сохранить Значения DG в различных переменных или в массиве. Эти результаты всегда запускаются с Лямбды. Я хочу сохранить значения DG, потому что я пишу программу, которая печатает информацию, связанную с для всех диапазонов лямбды.
Так моя печать программы
Lambda_Range = 0-0.05 distance= XXX force = XXX
Я также хочу Распечатать значения DG с этим
Lambda_Range = 0-0.05 distance= XXX force = XXX DG = XXX
Только идея, я могу думать, является этим, если я могу так или иначе сохранить значения DG в массиве или в переменных. Я предполагаю затем, что я могу достигнуть того, что я хочу.
Действительно ли возможно сделать это?
Можно обработать выходное использование 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