Fortran Coder

标题: linux系统下查找fortran程序中的值 [打印本页]

作者: Siemer    时间: 2020-9-22 19:59
标题: linux系统下查找fortran程序中的值
我有一个fortran程序 xx.f90,绝对路径是path,现在linux服务器上运行,需要用到grep命令查找程序中赋值的变量,比如有一个变量是
[Fortran] 纯文本查看 复制代码
kn= 3D0

我想将这个变量值根据变量名 kn 查找出来,然后将这个值赋给 a,使用的命令是
[Fortran] 纯文本查看 复制代码
#!/bin/bash
#
a=`grep 'pn_max= ' path/xx.f90`

报错信息是 syntax error near unexpected token `*,*'
不知问题出在哪里?请大佬指教

作者: 风平老涡    时间: 2020-9-22 21:18
本帖最后由 风平老涡 于 2020-9-22 21:38 编辑

a="$(grep 'pn_max= ' path/xx.f90)"
不过,grep只能查找pattern,没法赋值。


作者: Siemer    时间: 2020-9-22 21:47
风平老涡 发表于 2020-9-22 21:18
a="$(grep 'pn_max= ' path/xx.f90)"
不过,grep只能查找pattern,没法赋值。

谢谢您!!
我再详细描述一下我的问题哈,fortran那一行写的是
[Fortran] 纯文本查看 复制代码
    pn_max= 50.8D0, & !mol DIN/mol biomass N/day

我输入了命令
[Fortran] 纯文本查看 复制代码
a=`grep 'pn\_max= ' /home/mgdu/EZMGA/EZM/EZM.f90`;echo $a

会显示出结果


作者: Siemer    时间: 2020-9-22 21:48
风平老涡 发表于 2020-9-22 21:18
a="$(grep 'pn_max= ' path/xx.f90)"
不过,grep只能查找pattern,没法赋值。

接上条回复
但是将命令写成脚本的时候,如下
[Fortran] 纯文本查看 复制代码
a="$(grep 'pn_max= ' path/xx.f90)"
echo $a

就会出现



将脚本按照您的建议修改后,还是会出现这种报错,也不知道是哪里的问题


作者: 风平老涡    时间: 2020-9-23 11:33
本帖最后由 风平老涡 于 2020-9-23 11:57 编辑
Siemer 发表于 2020-9-22 21:48
接上条回复
但是将命令写成脚本的时候,如下
[mw_shl_code=fortran,true]a="$(grep 'pn_max= ' path/xx.f ...

试试 a=$(grep 'pn_max= ' path/xx.f90)


export a="$(grep 'pn_max= ' path/xx.f90)"

命令行与脚本有时会有少许差别,看一下man bash中的interactive项目。


作者: Siemer    时间: 2020-9-23 22:22
本帖最后由 Siemer 于 2020-9-23 22:23 编辑
风平老涡 发表于 2020-9-23 11:33
试试 a=$(grep 'pn_max= ' path/xx.f90)

谢谢您!
解决啦!
原因是pn_max这个变量的赋值语句里有其他字符,我换成了
[Fortran] 纯文本查看 复制代码
a1=`grep 'pn_max= ' path/EZM.f90`
echo $a1
sed -i "s|$a1|\    pn_max= 50.8D0\, \&|g" path/EZM.f90

就可以实现啦




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2