存储终端屏幕上显示的值

存储终端屏幕上显示的值

我使用一个名为 Gromacs 的软件。我使用以下命令:

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

在终端中计算并打印结果。以下是屏幕截图:

在此处输入图片描述

我想将 DG 值存储在不同的变量或数组中。这些结果总是以 Lambda 开头。我想存储 DG 值,因为我正在编写一个程序,该程序会打印与所有 lambda 范围相关的信息。

所以我的程序打印

    Lambda_Range = 0-0.05  distance= XXX   force = XXX 

我也想用它打印 DG 值

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

我唯一能想到的办法是,如果我能以某种方式将 DG 值存储在数组或变量中。我想这样我就能实现我想要的了。

可以这样做吗?

答案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 *//'mapfilestdin

这样,每个结果都将存储在数组中$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

相关内容