【发布时间】:2022-12-11 16:40:16
【问题描述】:
我有一个名为 POSCAR 的文件,看起来像这样。
Pt-FCC
3.975
3.975000 0.000000 0.000000
0.000000 3.975000 0.000000
0.000000 0.000000 3.975000
我需要多次更改 3x3x3 矩阵,以采用以下形状和值,其中 d 的范围从 0.005 到 0.025,增量为 0.005。
Pt-FCC
3.975
1+d 0.000000 0.000000
0.000000 1-d 0.000000
0.000000 0.000000 1/(1-d^2)
例如,对于 d=0.005:
Pt-FCC
3.975
1.005000 0.000000 0.000000
0.000000 0.995000 0.000000
0.000000 0.000000 1.000025
我不能在文件中分配一个变量并使用 expr 和 echo 来评估它,因为模拟程序不理解这一点。我正在尝试使用循环遍历 d 的所有值并复制原始 POSCAR 文件,然后使用 perl、sed 或 awk 修改矩阵,同时保持间距不变。
for i in $(seq 0.005 0.005 0.025)
do
cp POSCAR POSCAR_pure_shear/POSCAR_pure_$i
perl -pi .................. POSCAR_pure_$i
done
我知道这是一个很长的问题,我感谢任何可能使我朝着正确方向前进的帮助。我还是初学者!
【问题讨论】:
-
矩阵中的原始值是否毫无意义?
-
他们是。结构是文件的全部内容。因此,数字仅在程序理解每列多少数字方面才重要。
-
请使用您的
perl/awk/sedattemp(s) 和上述代码生成的(错误)输出更新问题 -
那么您是否想要一个输出文件,如
d的每个值所示...?是否有一些特殊原因需要单独的 shell 脚本和另一个脚本/单行程序来处理每个d?这一切都可以在一个程序中很好地完成。