24小时热门版块排行榜    

查看: 967  |  回复: 3

043114076

木虫 (正式写手)

[交流] 【原创】DL_POLY STATIS 数据提取的shell脚本实现 已有2人参与

STATIS文件的结构是这样的:

RECORD
ENERGY UNITS=kjoule/mol
      100  1.000000E-01        57
  -4.511110E+05   4.099103E+02 -4.527781E+05 -2.340504E+03 -4.518018E+05
  2.502369E+02  9.021103E+02  2.118284E+02  0.000000E+00 -4.542574E+05
  0.000000E+00  1.259219E+04  1.509093E+03  9.414544E+03 -2.528589E+02
  0.000000E+00  1.921407E+03  0.000000E+00  1.369171E+04  0.000000E+00
  0.000000E+00  0.000000E+00  9.000000E+01  9.000000E+01  9.000000E+01
  0.000000E+00 -3.722719E+00  7.904863E-02  8.569857E-02  1.611124E-01
  1.765559E-01  1.112503E-01  2.658214E-01  3.051339E-01  8.195875E-01
  4.890081E-01  1.705623E-01  1.978958E-01  0.000000E+00  0.000000E+00
  0.000000E+00  0.000000E+00  0.000000E+00  0.000000E+00  0.000000E+00
  0.000000E+00  0.000000E+00  0.000000E+00 -4.207968E+00 -1.568472E+00
-2.366729E-02 -1.568472E+00 -2.741807E+00 -1.594941E+00 -2.366729E-02
-1.594941E+00 -4.218381E+00
       200  2.000000E-01        57
-4.511112E+05   4.099364E+02 -4.528451E+05 -2.336209E+03 -4.518143E+05
  2.786064E+02  8.259597E+02  2.008752E+02  0.000000E+00 -4.557601E+05
  0.000000E+00  1.689977E+04  1.537109E+03  9.424109E+03  3.734186E+03
  0.000000E+00  2.204361E+03  0.000000E+00  1.369171E+04  0.000000E+00
  0.000000E+00  0.000000E+00  9.000000E+01  9.000000E+01  9.000000E+01
  0.000000E+00 -5.441284E+00  2.458810E-01  2.129879E-01  2.726666E-01
  3.423946E-01  2.721395E-01  5.091896E-01  4.866978E-01  1.504921E+00
  1.095589E+00  5.472309E-01  7.263942E-01  0.000000E+00  0.000000E+00
  0.000000E+00  0.000000E+00  0.000000E+00  0.000000E+00  0.000000E+00
  0.000000E+00  0.000000E+00  0.000000E+00 -6.088646E+00 -3.515484E-01
-8.385491E-01 -3.515484E-01 -5.695090E+00  1.820125E-01 -8.385491E-01
  1.820125E-01 -4.540118E+00

……

要提取红色部分的数据,使用fortran或其他语言很容易实现,但是为了下一步操作我尝试使用shell脚本实现:

#!/bin/sh
#read data from STATIS then plot
   line_num=$(grep -n '^ \{4,\}' STATIS | cut -d ":" -f 1 ) #得到绿色部分的行数
   for i in $line_num
   do
     sed -n "$(($i+1))p" STATIS | awk '{print $1}' >> tmp #提取i+1行中第一个数据,保存到tmp文件
   done

实现的过程是首先得到绿色部分的行数,然后提取i+1行的第一个数据。
由于初学shell脚本,发现运行效率很低,分享的同时也希望大家能帮助修改一下。

[ Last edited by 043114076 on 2011-1-5 at 20:52 ]
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

043114076

木虫 (正式写手)

运行效率低的原因,可能是由于对文件操作次数太多。第一次查找,第二-N次是循环提取数据。怎么才能不需要那个循环呢?
2楼2011-01-05 20:59:52
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zyj8119

木虫 (著名写手)

引用回帖:
Originally posted by 043114076 at 2011-01-05 20:46:06:
STATIS文件的结构是这样的:

RECORD
ENERGY UNITS=kjoule/mol
      100  1.000000E-01        57
  -4.511110E+05   4.099103E+02 -4.527781E+05 -2.340504E+ ...

这个是AWK语言?
好好学习,天天向上。
3楼2011-01-05 21:32:15
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

043114076

木虫 (正式写手)

★ ★ ★ ★ ★
ghcacj(金币+5):谢谢 2011-01-06 09:13:30
引用回帖:
Originally posted by zyj8119 at 2011-01-05 21:32:15:

这个是AWK语言?

是shell脚本语言

通过在网上搜索终于找到更为简单的解决办法,只需要一句命令:
方法一:
sed -n '/^ \{4,\}/{n;p;}' STATIS | awk '{print $1}'
方法二:
awk '/^    /{getline;print $1}' STATIS

取包含某一字符行的以下所有x行的数据
awk '/^    / {for(i=0;i
取包含某一字符行的以下第4行的数据
sed -n '/^ \{4,\}/{n;n;n;n;p;}' STATIS | awk '{print $1}'  #这个是我自己扩展的,取第几行就写几个n

参考:http://www.chinaunix.net/jh/24/15796.html

[ Last edited by 043114076 on 2011-1-5 at 22:52 ]
4楼2011-01-05 22:39:02
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 043114076 的主题更新
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 时间戳又变了8-15 +5 archvillain 2026-08-15 9/450 2026-08-15 12:06 by archvillain
[考博] 售一区SCI文章T0P,我:8O.551.O54,科目全,可十急 +3 HFw0lei2R37i 2026-08-14 5/250 2026-08-15 11:41 by KxMI1BYBxWX1
[考研] 售SCI一区T0P文章,我:8.O.55.1.O.54,科目齐全,可+急 +5 HFw0lei2R37i 2026-08-14 9/450 2026-08-15 11:33 by KxMI1BYBxWX1
[基金申请] 哪位老哥知道今年的国自然具体哪一天放榜? +6 Ldrop2023 2026-08-13 6/300 2026-08-15 10:09 by tuanggou
[教师之家] 售SCI一区T0P文章,我:8O.55.1.O.5.4,科目齐全,可+急 +5 7lpolszZVXgi 2026-08-14 6/300 2026-08-15 09:28 by sunzitan
[基金申请] filecode +7 cratir 2026-08-14 11/550 2026-08-15 06:19 by 学员8dgXkO
[硕博家园] 售SCI一区T0P文章,我:8.O55.1.O.54,科目全,可十急 +3 HFw0lei2R37i 2026-08-14 4/200 2026-08-15 04:17 by 4wMiSEwB6436
[找工作] 售SCI文章,我:8O5.5.1.O.54,科目齐全,可+急 +4 k0dTPqJtl0jt 2026-08-14 4/200 2026-08-15 02:21 by 4wMiSEwB6436
[硕博家园] 售SCI一区文章,我:8O5.5.1.O5.4,科目全,可伽急 +3 k0dTPqJtl0jt 2026-08-14 4/200 2026-08-15 01:28 by 4wMiSEwB6436
[基金申请] 咱们一起用铁证分析2026国家社科基金中标与否 +7 启萌科技 2026-08-12 22/1100 2026-08-14 23:45 by Noways
[教师之家] 售SCI一区文章,我:8.O.55.1.O.54,科目齐全,可伽急 +3 HFw0lei2R37i 2026-08-14 5/250 2026-08-14 22:32 by 4wMiSEwB6436
[基金申请] 奇怪,两个人的filecode固定段从头到尾一模一样 +8 布布和一二 2026-08-10 11/550 2026-08-14 14:58 by Equinoxhua
[硕博家园] 一作与独作在应聘高校教师时区别大吗 +3 mbygzh 2026-08-08 4/200 2026-08-13 19:31 by 龙-樱
[基金申请] 静等基金结果 +8 gjjjzhong 2026-08-10 21/1050 2026-08-13 17:56 by 且听虎啸
[基金申请] 重要来源:本周末出结果 +10 瞬息宇宙 2026-08-12 10/500 2026-08-13 15:46 by likettle
[基金申请] 分享一下我之前已中青C的计划书的filecode +4 布布和一二 2026-08-11 5/250 2026-08-13 12:56 by cratir
[基金申请] 综述论文作为代表作会不会影响评审专家的印象分? +11 yufeiwaner 2026-08-09 13/650 2026-08-12 08:17 by yufeiwaner
[基金申请] 帮忙看看fileCode +7 wwncly 2026-08-10 13/650 2026-08-11 19:36 by 冰心玉壶晴
[基金申请] 确定了,国自然21号放榜 +6 布布和一二 2026-08-10 7/350 2026-08-10 19:15 by 2000zf36392
[基金申请] 据悉今年马上要出结果了 +7 瞬息宇宙 2026-08-10 8/400 2026-08-10 12:42 by Vivilian
信息提示
请填处理意见