【发布时间】:2025-12-31 01:00:12
【问题描述】:
我正在尝试获取一个脚本来使用 GAMESS 包自动执行一些任务,我希望以后可以从中推断出更复杂的情况。唉,看来我的 Unix 编程技能达不到标准。
我有一个通用的 GAMESS 输入文件 'ion.inp' 的形式:
$CONTRL SCFTYP=<tag4> ICHARG=<tag5> MULT=<tag6> ISPHER=1 NPRINT=-5 $END
$BASIS GBASIS=<tag> $END
$DATA
<tag1> energy
Dnh 2
<tag2> <tag3> .0 .0 .0
$END
我(作为 MWE)有一个“ion.inp”参数的查找表,例如“table.dat”,其中
<tag1> | <tag2> | <tag3> | <tag4> | <tag5> | <tag6>
Hidrogen | H | 1.0 | ROHF | 0 | 2
Hidrogen cation | H | 1.0 | RHF | 1 | 1
为了可移植性,我想获得一个使用 POSIX sh、sed 或 awk 的解决方案,但经过一些试验(使用 sh 或 sed,我对 awk 一点也不熟悉,尽管我知道它是一种潜力在这种情况下的解决方案)我无法让它工作。
文件 'ion.inp' 可以就地编辑,因为它将在 sh 循环中运行。除了这个所谓的简单替换之外,我已经完成了所有其他工作。
任何帮助将不胜感激!
【问题讨论】:
-
where the <tag#> are taken from each line of the table.。你怎么知道要从table.dat表中取什么 row (在你的例子中是 2 或 3)?GBASIS=<tag>需要做什么? -
如果您可以将文件 ion.inp 更改为将标签格式化为
"$tag4"而不是<tag4>,事情会更容易。这样你就可以从你的查找中生成一个文件,例如tag4=ROHF然后将生成的文件包含在ion.inp中,视为脚本。 -
替换应该一次循环遍历每一行,从模板创建一个新的 INP 文件。 GBASIS 中的
将循环通过更高的循环,但给出一个工作示例,我可以从中推断出解决方案。 -
我在编写 MWE 时并没有考虑代码。不过感谢兰金先生的想法。
-
@OsmarTormenaJunior,好吧,最后的评论并没有真正解决我的问题。比如说,给定您的示例文件,结果输出应该是什么样子?