我想从文件中提取一个数字,然后执行简单的数学运算,然后将其粘贴到另一个文件

我想从文件中提取一个数字,然后执行简单的数学运算,然后将其粘贴到另一个文件

大家好,请帮我编写一个脚本来执行以下操作:

  1. 我想打开一个名为 C60_GRM_box.gro 的文本文件(我从下面这个文件中复制了第一行),然后提取下面的第二行 127240;
GRM in vacuum
127240
    1GRM     C1    1   0.061   0.071   0.000
    1GRM     C2    2   0.184   0.142   0.000
  1. 然后,我想从第一步中提取的数字中减去 2800,然后将结果除以 60

我想要做的:(步骤 1 中提取的数字 - 2800)/60 = 结果

  1. 最后我要打开另一个名为C60_GRM_box.top的txt文件(我已将我想要替换部分的文本文件中的所有数据复制到下面)并用我在步骤2中获得的结果替换一个数字(即G8LE单词旁边的数字,即下面的3000),我已将第二个名为C60_GRM_box.top的文件的所有内容粘贴在下面;
; Include forcefield parameters
include "/home/abdelaal/Desktop/GROMACS/C60:TAPC/C60_GRM/41/gromos54a7.ff/forcefield.itp"

; Include topology for GRM
include "/home/abdelaal/Desktop/GROMACS/C60:TAPC/C60_GRM/41/GRM.itp"
ifdef POSRES
include "/home/abdelaal/Desktop/GROMACS/C60:TAPC/C60_GRM/41/posrestr.itp"
endif

; Include topology for C60
include "/home/abdelaal/Desktop/GROMACS/C60:TAPC/C60_GRM/41/C60.itp"

[ system ]

; Name

GRM in vacuum 

[ molecules ]

; Compound                 #mols

GRM                           1

G8LE                     strong text    3000

我不需要打开步骤 1 和 3 中的文件,如果我可以在不打开文件的情况下完成上述所有操作那就太完美了。

非常感谢

答案1

这个 bash shell 脚本可以执行您想要的操作,但是您可以对其进行调整以更改源/目标功能。

假设source.txt包含源数据;target.txt是您想要替换的

# get the 2nd line or source.txt-2800
val=$(expr `head -2 source.txt | tail -1` - 2800)
export val2=$(expr $val / 60)
# replace the result
perl -pi -e 's/(G8LE\s+[^\d]*)\d+/$1$ENV{val2}/g' target.txt

相关内容