计算化学公社

标题: 运行gjf2xyz.sh文件类型转换出错 [打印本页]

作者
Author:
dongdong    时间: 2020-6-30 15:52
标题: 运行gjf2xyz.sh文件类型转换出错
本帖最后由 dongdong 于 2020-6-30 16:43 编辑

在centos装了Multiwfn并将一个.gjf文件成功转换成.xyz类型。于是在centos中运行了卢老师之前写的gjf2xyz.sh脚本希望批量转化,但是尝试运行一个文件得到下面报错,是我系统某个源文件有问题么,希望得到各位老师解答。谢谢哦! (, 下载次数 Times of downloads: 35)

作者
Author:
ABetaCarw    时间: 2020-6-30 16:21
建议贴个gjf看看
作者
Author:
abin    时间: 2020-6-30 16:35
本帖最后由 abin 于 2020-6-30 22:47 编辑
  1. 代码框存在bug,复制粘贴有时候就乱套了。 下面重新粘贴了一个。
复制代码
  1. for f in $*
  2. do
  3. #f=pt-2.gjf

  4. grep -n '^[[:space:]]*

  5. 随便对付了一个。

  6. 用法,另存为比如convert-gif-to-xyz.sh
  7. bash convert-gif-to-xyz.sh *gjf ${f} | cut -f 1 -d : | head -n 3 > tmp

  8. end_line_num_tmp=`sed -n '3p' tmp `

  9. ((end_line_num=${end_line_num_tmp} - 1))

  10. start_line_tmp=`sed -n '2p' tmp`

  11. ((start_line=${start_line_tmp} + 2))

  12. sed -n "${start_line},${end_line_num}p" ${f} > ${f}.xyz





  13. done
复制代码

其实还是乱套的,比如再次粘贴的代码,依旧会在中间加入其他内容。

随便对付了一个。

用法,另存为比如convert-gif-to-xyz.sh
bash convert-gif-to-xyz.sh *gjf
那就粘贴到这里吧:
for f in $*
do
#f=pt-2.gjf


grep -n '^[[:space:]]*$' ${f} | cut -f 1 -d : | head -n 3 > tmp


end_line_num_tmp=`sed -n '3p' tmp `


((end_line_num=${end_line_num_tmp} - 1))


start_line_tmp=`sed -n '2p' tmp`


((start_line=${start_line_tmp} + 2))


sed -n "${start_line},${end_line_num}p" ${f} > ${f}.xyz




done


作者
Author:
dongdong    时间: 2020-6-30 16:44
ABetaCarw 发表于 2020-6-30 16:21
建议贴个gjf看看

谢谢您的回答,已经上传。GJF应该没问题,我用Multiwfn直接运行是可以得到.xyz的文件。
作者
Author:
dongdong    时间: 2020-6-30 16:55
abin 发表于 2020-6-30 16:35
随便对付了一个。

用法,另存为比如convert-gif-to-xyz.sh

谢谢您的回复,按照您的说法运行了程序,但是出现了个别报错(如图)
(, 下载次数 Times of downloads: 39)

作者
Author:
abin    时间: 2020-6-30 17:30
dongdong 发表于 2020-6-30 16:55
谢谢您的回复,按照您的说法运行了程序,但是出现了个别报错(如图)

自己修改标点符号呗……

我只用Linux
也许当前页面会把部分标点,尤其是引号转错。

作者
Author:
abin    时间: 2020-6-30 17:35
dongdong 发表于 2020-6-30 16:55
谢谢您的回复,按照您的说法运行了程序,但是出现了个别报错(如图)

需要修改标点,把所有的标点用英文输入法敲一下。

由于粘贴复制的关系,
其中一行似乎多余了。

方案很简单
就是数空行
然后把特定空行中间的东西输出。
作者
Author:
liuyuje714    时间: 2020-6-30 17:40
本帖最后由 liuyuje714 于 2020-6-30 19:50 编辑

就自己写一个脚本就行了,不一定非要调用Multiwfn,脚本见附件。使用方式
  1. bash awk_gjf2xyz.bsh
复制代码
复制脚本到需要转换的所有gjf文件夹中,执行上面的命令即可转换该文件夹下的所有gjf文件。默认输出为原文件名.xyz




作者
Author:
xuhj199508    时间: 2020-6-30 17:40
你是直接把脚本上传上去的吗?有没有试过dos2unix?
作者
Author:
sobereva    时间: 2020-6-30 19:25
我这里CentOS 7.4下转化没有任何问题,输出的xyz文件附上了。用的sh文件就是你帖子里的,Multiwfn是官网上最新版本
(, 下载次数 Times of downloads: 24)
(, 下载次数 Times of downloads: 0)

你当前情况几乎一定是Multiwfn没有恰当安装,导致没法直接通过运行Multiwfn命令启动Multiwfn,要么是Multiwfn版本太老
正确安装流程Multiwfn手册2.1.2节写明了,这里也演示了
在Linux系统下安装Multiwfn 3.6的演示(CentOS 7.6)
https://www.bilibili.com/video/av41402462/

虽然也有别的方法转化,但还是通过.sh脚本调用Multiwfn转化最方便也最可靠。而且同样的方式可以用来在各种类型文件间转换。


作者
Author:
欢乐多    时间: 2020-7-6 01:42
sobereva 发表于 2020-6-30 19:25
我这里CentOS 7.4下转化没有任何问题,输出的xyz文件附上了。用的sh文件就是你帖子里的,Multiwfn是官网上 ...

老师,最新版的Multiwfn转换文件,坐标不能写进去。
作者
Author:
sobereva    时间: 2020-7-6 12:13
欢乐多 发表于 2020-7-6 01:42
老师,最新版的Multiwfn转换文件,坐标不能写进去。

我这里没问题。估计是你没把settings.ini里iloadgauout设为1
作者
Author:
欢乐多    时间: 2020-7-7 08:05
好的,老师,已改,




欢迎光临 计算化学公社 (http://bbs.keinsci.com/) Powered by Discuz! X3.3