LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 819|回复: 2

提取数据为什么会出错??

[复制链接]
发表于 2006-10-6 08:30:02 | 显示全部楼层 |阅读模式
我编写了一个sh脚本提取计算结果中某些行、某些列的数据。以前用此脚本算都是正常的,现在算新的体系出现了问题。具体问题是:如果一个结果文件中应该提取121行数据,在用脚本提取后,行数减少了,也就是说有些行的数据没有被一起提出来。
需要提取的数据原样如下:
          121
    1     -46.402
    2      -1.670
    3     -14.803
    4     -81.984
    5    -123.781
    6      -2.014
    7      -1.974
    8      -0.227
    9       0.898
   10      -0.474
   11       5.187
   12    -137.736
   13      -3.375
   14     -69.712
   15     -14.886
   16     -29.161
   17     -31.966
   18     -26.630
   19     -41.166
   20     -10.523
   21      -0.022
   22      -9.898
   23     -25.691
   24       2.415
   25      -0.810
   26      28.456
   27      15.554
   28     -10.792
   29     -16.917
   30      -6.108
   31     -18.047
   32     -14.392
   33      -9.124
   34     -11.182
   35     -21.516
   36     -42.277
   37     -56.818
   38     -22.097
   39     -13.954
   40      11.128
   41      -4.202
   42      -2.364
   43      -6.104
   44      -3.093
   45      -1.789
   46      -2.697
   47      -2.161
   48     -10.059
   49     -23.488
   50     -45.157
   51     -22.211
   52     -25.632
   53     -33.445
   54     -13.480
   55     -10.918
   56     -14.527
   57     -84.508
   58     -28.976
   59     -25.749
   60     104.442
   61       0.109
   62      -1.024
   63      -1.171
   64      -2.713
   65     -24.719
   66     -33.393
   67     -36.172
   68     -26.182
   69     -12.897
   70     -17.210
   71     -23.623
   72     -15.788
   73     -38.116
   74      -1.112
   75      -0.428
   76      -1.078
   77      -2.719
   78      -1.131
   79      -4.262
   80     -29.430
   81     -47.441
   82      -1.668
   83      -0.643
   84      -1.375
   85      -0.165
   86      -2.333
   87      -1.609
   88     -12.820
   89      -7.455
   90      -8.461
   91       9.343
   92     -28.287
   93     -23.651
   94     -24.727
   95      -2.037
   96      -6.075
   97       0.410
   98     -18.987
   99     -46.711
  100     -25.867
  101     -40.888
  102     -33.595
  103     -25.011
  104     -13.526
  105     -45.274
  106     -34.306
  107     -27.879
  108      -2.677
  109      -1.403
  110       0.966
  111       0.134
  112       0.261
  113      34.627
  114      -4.172
  115     -14.935
  116     -14.605
  117     -30.374
  118    -111.839
  119     -10.304
  120       0.090
  121   -2790.460

采用两个脚本,第一个脚本提取数值前面的序号数,也就是1-121,如脚本exact_number 所示:
#!/bin/sh
dos2unix $1
a=`sed -n '/TOTAL INTERACTION ENERGY MATRIX/=' $1|sed -n '$p'`
sed -n ''${a}',/INDIVIDUAL GROUPS INTERACTION/'p $1 |grep '[1-1000]' |sed -n '1466,$p'| cut -c1-7 |sed -e '$a\
' > number


提取结果如下:
    1  
    2  
    3  
    4  
    5  
    6  
    7  
    8  
    9  
   10  
   11  
   12  
   13  
   14  
   15  
   16  
   17  
   18  
   19  
   20  
   21  
   23  
   24  
   25  
   27  
   28  
   29  
   30  
   31  
   32  
   33  
   34  
   35  
   37  
   38  
   39  
   40  
   41  
   43  
   44  
   45  
   47  
   48  
   50  
   51  
   54  
   55  
   56  
   57  
   60  
   61  
   62  
   63  
   64  
   65  
   67  
   68  
   69  
   70  
   71  
   72  
   73  
   74  
   75  
   76  
   77  
   78  
   80  
   81  
   82  
   83  
   84  
   85  
   87  
   88  
   90  
   91  
   93  
   95  
   96  
   97  
   98  
   99  
  100  
  101  
  102  
  103  
  104  
  105  
  106  
  107  
  108  
  109  
  110  
  111  
  112  
  113  
  114  
  115  
  116  
  117  
  118  
  119  
  120  
  121  

其中有些序号数没有被提取出来。

第二个脚本是提取序号数后面的数据,如 extact_out脚本:
#!/bin/sh
dos2unix $1
a=`sed -n '/TOTAL INTERACTION ENERGY MATRIX/=' $1|sed -n '$p'`
sed -n ''${a}',/INDIVIDUAL GROUPS INTERACTION/'p $1 |grep '[1-1000]' |sed -n '1466,$p'| cut -c8-19 |sed -e '$a\
' > ${1%out}tmp


生成的tmp文件如下:
   -46.402
    -1.670
   -14.803
   -81.984
  -123.781
    -2.014
    -1.974
    -0.227
     0.898
    -0.474
     5.187
  -137.736
    -3.375
   -69.712
   -14.886
   -29.161
   -31.966
   -26.630
   -41.166
   -10.523
    -0.022
   -25.691
     2.415
    -0.810
    15.554
   -10.792
   -16.917
    -6.108
   -18.047
   -14.392
    -9.124
   -11.182
   -21.516
   -56.818
   -22.097
   -13.954
    11.128
    -4.202
    -6.104
    -3.093
    -1.789
    -2.161
   -10.059
   -45.157
   -22.211
   -13.480
   -10.918
   -14.527
   -84.508
   104.442
     0.109
    -1.024
    -1.171
    -2.713
   -24.719
   -36.172
   -26.182
   -12.897
   -17.210
   -23.623
   -15.788
   -38.116
    -1.112
    -0.428
    -1.078
    -2.719
    -1.131
   -29.430
   -47.441
    -1.668
    -0.643
    -1.375
    -0.165
    -1.609
   -12.820
    -8.461
     9.343
   -23.651
    -2.037
    -6.075
     0.410
   -18.987
   -46.711
   -25.867
   -40.888
   -33.595
   -25.011
   -13.526
   -45.274
   -34.306
   -27.879
    -2.677
    -1.403
     0.966
     0.134
     0.261
    34.627
    -4.172
   -14.935
   -14.605
   -30.374
  -111.839
   -10.304
     0.090
-2790.460

也有一些行的数据没有被提出来。

请大家帮忙分析一下,为什么出现这样的情况?
发表于 2006-10-6 14:11:47 | 显示全部楼层
用awk就可以很快的提起出来啊,干嘛那么复杂那?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-10-6 14:54:21 | 显示全部楼层
awk的用法我了解的很少,以后会仔细学的。现在的问题是:为什么以前提取的数据都是正确的行数,现在却出现少一些行的情况呢?(注:以前和现在提取用的结果文件是不同的。)恳请大家帮忙找出问题。谢谢了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表