24小时热门版块排行榜    

查看: 2190  |  回复: 21
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

wo8165827

金虫 (小有名气)

[交流] 【求助】帮忙VASP写个小程序 已有4人参与

用Linux帮忙VASP写个小程序,

要求:
1 查找到某一目录下文件夹中的OZSICAR
2 提取OZSICAR中最后一个E0的数据,如提取“ E0= -.73812181E+01”  (OZSICAR中有很多E0)
3 将提取的E0数据放到一个文件下"log"
回复此楼
计算的魅力
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wangle_xq

银虫 (小有名气)

★ ★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
zzy870720z(金币+3):谢谢指导,这个厉害,linux编程高手,向你学习,呵呵 2010-09-13 08:27:31
wo8165827(金币+7):非常感谢 2010-09-13 09:07:10
引用回帖:
Originally posted by wo8165827 at 2010-09-12 21:13:15:


谢谢,不过还是不行。可以执行,但log文件里就只有‘E0=’这几个字符。E0的数据没有

估计错误处在没有明确指明awk的输出域。

语句grep "E0= " */OZSICAR | tail -1 | awk '{print $5}' >>log
应该改为grep "E0= " */OZSICAR | tail -1 | awk '{print $6}' >>log

容易出错的地方就在于*/OZSICAR
初次接触BASH,你要了解一下这个语句是什么意思。在这里简单解释一下。
grep是指在制定文件中逐行搜索并打印
“E0”是搜索的内容,如果该行含有查询内容则打印到标准输出(屏幕)
*/OSZICAR就是文件路径,是指当前路径下所有一级子目录中的OSZICAR。故,下级路径中必须包含OSZICAR否则路径无效。
|为管道,意思就是管道左边的输出作为管道右侧语句的输入。执行顺序为从左到右。管道可能不好理解。多用用就知道了,这里不多费笔墨。
tail为输出控制,打印输入的最后几行,-1指最后一行。
awk是BASH下的一个脚本工具。print $6的意思是打印第六个域包含的数值。

之前的脚本因为选择5为输出域,所以你得到的就是几个E0=。这个域正好是能量值的前一个。如果一开始不知道怎么分割域,挨个试试看就好了。

最后说说>和>>的区别,前一个为新建添加,后一个为增量添加。

楼主打算采用的这个方式一定要保证子目录文件名按照linux shell下的默认顺序排序。举例说明。现有文件夹1,2,11,12,112。
若按照数字大小,我们希望的顺序就是1,2,11,12,112
但是按照字母顺序的话,shell的默认顺序就是1,11,112,12,2
如果文件名命名为001,002,012。就不会出现顺序错误的问题。

我常用的脚本会加入循环。稍微复杂,但是方便直接生成整理后的数据文件
#!/bin/bash
for subfolder in 1 2 11 12 112
do
  echo -ne $subfolder"\t" >> log
  grep "E0= " $subfolder/OZSICAR | tail -1 | awk '{print $6}' >>log
done

[ Last edited by wangle_xq on 2010-9-13 at 04:37 ]
网络日志 http://blog.163.com/wangle_xq/ 关注计算材料科学的应用,以及相关的计算机技术。文章以转贴为主,少量原创。欢迎参观
15楼2010-09-13 04:24:25
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 22 个回答

huangyc

木虫 (正式写手)


wo8165827(金币+5): 2010-09-11 17:16:12
cenwanglai(金币+1):谢谢提示。 2010-09-12 11:53:01


grep F OSZICAR  > log
2楼2010-09-11 16:23:07
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wo8165827

金虫 (小有名气)

引用回帖:
Originally posted by huangyc at 2010-09-11 16:23:07:


grep F OSZICAR  > log

这个能提取E0的数据吗?我只要最后一个数据呢?

[ Last edited by wo8165827 on 2010-9-11 at 17:16 ]
计算的魅力
3楼2010-09-11 16:41:50
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

锐利的碎片

木虫 (正式写手)

star watcher


wo8165827(金币+5):谢谢 2010-09-11 18:51:15
zzy870720z(金币+1):谢谢指点 2010-09-12 09:17:10
引用回帖:
Originally posted by wo8165827 at 2010-09-11 16:41:50:



这个能提取E0的数据吗?我只要最后一个数据呢?

[ Last edited by wo8165827 on 2010-9-11 at 17:16 ]

grep "E0= " OZSICAR | tail -1 | tee log
4楼2010-09-11 17:26:55
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见