免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3294 | 回复: 11
打印 上一主题 下一主题

[求助]这样的数据如何转换? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-11-21 09:19 |只看该作者 |倒序浏览
各位达人,现有如下数据要转换,不知道怎么写PREL脚本:
文件如下:
>head -n 100 WI730504.DAT //这里只显示了前100行,后面还有很多,并且记录数未知
../out/wi730504.dat                     
wind speed  for BOHAI  timestep=    1
  8.40  8.49  8.50  8.57  8.59  8.68  8.70
  8.67  8.68  8.69  8.77  8.79  8.88  8.89
  8.90  8.97  8.98  9.00  9.01  9.09  9.10
  9.19  9.20  9.28  9.30  9.31  9.32  9.34
  9.50  9.51  9.52  9.53  9.61  9.63  9.64
  9.73  9.74  9.74  9.82  9.84  9.85  9.86
  9.95  9.95 10.03 10.05 10.06 10.07 10.09
10.17 10.17 10.18 10.19 10.20 10.22 10.30
10.37 10.38 10.38 10.40 10.40 10.42 10.43
10.42 10.42 10.43 10.44 10.52 10.53 10.55
10.52 10.53 10.53 10.55 10.56 10.57 10.65
10.56 10.56 10.57 10.57 10.58 10.59 10.60
10.57 10.57 10.57 10.58 10.59 10.60 10.61
10.49 10.49 10.50 10.50 10.51 10.53 10.55
10.43 10.43 10.43 10.43 10.44 10.52 10.54
10.43 10.43 10.43 10.43 10.44 10.46 10.48
10.36 10.36 10.37 10.45 10.40 10.48 10.48
10.38 10.46 10.48 10.49 10.57 10.58 10.52
10.50 10.59 10.69 10.79 10.80 10.80 10.71
10.73 10.91 11.10 11.21 11.22 11.13 11.02
11.06 11.41 11.72 11.90 11.90 11.72 11.43
11.47 12.09 12.59 12.80 12.71 12.42 11.94
11.79 12.68 13.59 13.76 13.67 13.20 12.59
12.01 13.06 14.02 14.61 14.60 13.94 12.90
11.99 13.07 14.26 14.88 15.31 14.13 12.99
11.61 12.68 13.74 14.48 14.46 13.73 12.60
11.09 11.99 13.07 13.41 13.48 12.77 11.98
10.38 11.08 11.67 12.06 11.98 11.59 10.93
  9.57 10.02 10.41 10.62 10.62 10.35  9.95
  8.85  9.13  9.41  9.52  9.45  9.35  9.07
  8.24  8.42  8.53  8.63  8.56  8.54  8.36
  7.82  7.91  7.93  7.95  7.95  7.86  7.78
  7.53  7.55  7.56  7.57  7.57  7.49  7.40
wind direc  for BOHAI  timestep=    1
  0.64  0.69  0.74  0.79  0.83  0.86  0.89
  0.59  0.63  0.68  0.72  0.75  0.78  0.80
  0.54  0.59  0.63  0.67  0.69  0.71  0.73
  0.52  0.56  0.60  0.63  0.65  0.67  0.69
  0.50  0.54  0.58  0.61  0.63  0.65  0.66
  0.50  0.54  0.57  0.60  0.62  0.63  0.64
  0.50  0.53  0.57  0.59  0.60  0.62  0.64
  0.50  0.53  0.56  0.58  0.60  0.62  0.64
  0.49  0.53  0.56  0.59  0.61  0.62  0.63
  0.49  0.52  0.55  0.58  0.60  0.62  0.63
  0.50  0.53  0.56  0.58  0.61  0.62  0.64
  0.50  0.53  0.56  0.59  0.61  0.62  0.63
  0.50  0.54  0.57  0.59  0.61  0.62  0.63
  0.50  0.54  0.57  0.60  0.61  0.62  0.63
  0.50  0.53  0.57  0.60  0.62  0.63  0.63
  0.51  0.54  0.57  0.60  0.62  0.64  0.64
  0.51  0.54  0.58  0.61  0.63  0.64  0.65
  0.51  0.55  0.58  0.61  0.63  0.65  0.66
  0.52  0.55  0.60  0.62  0.64  0.65  0.66
  0.52  0.56  0.60  0.63  0.65  0.66  0.66
  0.52  0.56  0.61  0.63  0.66  0.66  0.66
  0.53  0.57  0.61  0.63  0.65  0.66  0.66
  0.54  0.57  0.61  0.63  0.65  0.66  0.67
  0.54  0.57  0.61  0.63  0.65  0.66  0.67
  0.54  0.58  0.61  0.63  0.66  0.66  0.67
  0.54  0.58  0.61  0.64  0.65  0.66  0.67
  0.54  0.58  0.61  0.64  0.66  0.67  0.67
  0.55  0.58  0.61  0.64  0.66  0.67  0.67
  0.54  0.58  0.62  0.64  0.66  0.66  0.67
  0.54  0.59  0.62  0.65  0.66  0.67  0.67
  0.54  0.59  0.64  0.66  0.68  0.69  0.68
  0.57  0.62  0.66  0.70  0.71  0.72  0.72
  0.60  0.64  0.70  0.73  0.75  0.76  0.77
wind speed  for BOHAI  timestep=    2
  8.17  8.24  8.26  8.32  8.36  8.44  8.48
  8.41  8.44  8.46  8.51  8.56  8.63  8.66
  8.68  8.72  8.74  8.77  8.81  8.88  8.91
  8.99  9.01  9.07  9.09  9.13  9.16  9.20
  9.30  9.32  9.35  9.38  9.44  9.49  9.52
  9.57  9.60  9.62  9.69  9.73  9.77  9.80
  9.85  9.86  9.93  9.95  9.98 10.02 10.06
10.10 10.13 10.15 10.16 10.20 10.23 10.30
10.33 10.35 10.36 10.40 10.42 10.47 10.49
10.45 10.47 10.49 10.51 10.57 10.61 10.66
10.59 10.60 10.61 10.64 10.67 10.70 10.77
10.67 10.67 10.69 10.70 10.74 10.77 10.80
。。。。。。。。。。。。。。。。。。。
======================================
第一行是原先的文件名,第二行是时间tag,然后是一个33rowsX41Columns的矩阵,表示风速绝对值,之后又是一个时间TAG,下一个同样大小的矩阵表示风的方向。如此继续,有很多个这样的记录
现在的任务是,要把这种数据表示成这样的样子:
wind speed at time:1
u-direction wind Matrix(33*7)//一个33X7的矩阵,就像上面一样
v-direction wind Matirx (33*7)
wind speed at time:2
u-direction wind Matrix(33*7)
v-direction wind Matirx (33*7)
..............

这样的形式,其中,u_wind=Speed*cos(wind_direction),v_wind=Speed*sin(wind_dircetion),请问各位,如何解决?
我本来想用GAWK做,不过GAWK用数组太麻烦了,大家有没有什么好的建议?
谢谢!

[ 本帖最后由 fiowrf 于 2006-11-21 09:34 编辑 ]

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
2 [报告]
发表于 2006-11-21 09:35 |只看该作者
hard work....

用一个二维array...存33*41的内容..

以时间tag为分隔...

你先写出些代码..再来讨论....

论坛徽章:
4
处女座
日期:2013-09-01 19:30:07双鱼座
日期:2013-09-28 10:58:45双子座
日期:2014-05-23 08:32:0215-16赛季CBA联赛之八一
日期:2016-04-12 19:55:42
3 [报告]
发表于 2006-11-21 10:20 |只看该作者
需要告知详细的算法
33rowsX41Columns怎么又变成33X7的矩阵了呢

论坛徽章:
0
4 [报告]
发表于 2006-11-21 14:30 |只看该作者
回atgc:
本来是33×41的矩阵,因为贴上来太多了,大家看着也眼花,我用cut -c1-42,只输出了前7列。

论坛徽章:
4
处女座
日期:2013-09-01 19:30:07双鱼座
日期:2013-09-28 10:58:45双子座
日期:2014-05-23 08:32:0215-16赛季CBA联赛之八一
日期:2016-04-12 19:55:42
5 [报告]
发表于 2006-11-21 14:43 |只看该作者
我是不太明白你要什么样的结果
好像就打印了一个时间

论坛徽章:
0
6 [报告]
发表于 2006-11-21 14:54 |只看该作者
原帖由 fiowrf 于 2006-11-21 14:30 发表
回atgc:
本来是33×41的矩阵,因为贴上来太多了,大家看着也眼花,我用cut -c1-42,只输出了前7列。

偶也糊涂了,你要实现什么?

论坛徽章:
0
7 [报告]
发表于 2006-11-22 11:04 |只看该作者
自己写了一下,不过还没调试通过,各位指点一下?
----------------------------------------------------------------------------------------------------
#!/bin/perl
#
# Convert the speed-direction wind data to u-v wind data
# [email]zuohj@cnooc.com.cn[/email]
# 22,Nov,2006,Pekin
use warnings;
use strict;

my $Rows=33;
my $Columns=41;
#my $FileName="WI730504.DAT";
my $Line;
my $TimeTag; #时间戳
my @tmpArr;  #临时变量
my $speed;    #保存读出来的风速大小
my $dir;          #保存读得的风向
my @uwind;    #存储u-wind
my @vwind;    #存储v-wind
foreach my $FileName ( @ARGV ) {
        print( "Processing $FileName: " );
        open(FData,"<$FileName")||die "File $FileName Can not open!\n";
        open(FOUTPUT,">>Result.dat")||die "File Result.dat Can not open!\n";
        while($Line=<FData>){
#                 $Line=~/wind/ && print $Line;
                if ( $Line=~/wind speed/){                                #都是用wind speed开头
# 1.
# Read the time tag;
                        $TimeTag=$Line=~s/\S+\s(\d+)/$1/; #get the time tag...
#                        $TimeTag=$1;
                        print "$TimeTag\n";
# 2.
# Read the speed and directio
                        for(my idy=1;idy<=33;idy++){
                                $Line=<FData>;        #Read new line,the data...
                                @tmpArr=split(/\s+/,$Line);
                                $speed[idy]=\@tmpArr;
                        }
                        $Line=<FData>;         #空过一行,无用
                        for(my idy=1;idy<=33;idy++){
                                $Line=<FData>;        #Read new line,the data...
                                @tmpArr=split(/\s+/,$Line);
                                $dir[idy]=\@tmpArr;
                        }
# 3
# Calculate the u,v wind
                        for(my idy=1;idy<=33;idy++){
                                for idx=1;idx<=33;idx++){
                                        $uwind[idy][idx]=$speed[idy][idx]*cos($dir[idy][idx]);
                                        $vwind[idy][idx]=$speed[idy][idx]*sin($dir[idy][idx]);
                                }
                        }
# 4.
# Write the result data
                        for(my idy=1;idy<=33;idy++){
                                print FOUTPUT @uwind;
                                print FOUTPUT @vwind;
                        }

                }
        }
        close(FData)||die "Close error!";
        close(FOUTPUT)||die "Close error!";
}
----------------------------------------------------------------------------------------------------

现在进行第一步得到时间戳这一步就不行,$TimeTag是空的。后面的还没调试到。

[[i] 本帖最后由 fiowrf 于 2006-11-22 11:10 编辑 [/i]]

论坛徽章:
0
8 [报告]
发表于 2006-11-22 11:13 |只看该作者
PS:想要得到类似这样的结果:
其中的时间戳无所谓,有没有都可以,最好有。
--------------------------------------------------------
19700101  140000                                                               
   3.666   3.761   3.641   3.761   3.641   3.637   3.543   3.641   3.735   3.829
   3.638   3.638   3.735   3.731   3.731   3.731   3.731   3.735   3.738   3.835
   3.609   3.708   3.708   3.708   3.708   3.708   3.708   3.711   3.711   3.810
   3.677   3.778   3.778   3.778   3.778   3.778   3.778   3.778   3.781   3.882
   3.772   3.873   3.873   3.873   3.873   3.873   3.876   3.876   3.876   3.876
   3.807   3.807   3.911   3.911   3.911   4.019   4.019   4.023   4.023   4.023
   3.735   3.841   3.844   3.950   3.950   4.059   4.084   4.084   4.084   4.084
   3.848   3.848   3.957   3.985   4.091   4.095   4.095   4.095   4.095   4.095
   3.851   3.985   3.992   4.102   4.131   4.131   4.131   4.131   4.020   4.123
   3.858   3.995   4.134   4.138   4.167   4.274   4.274   4.241   4.241   4.234
   3.971   4.030   4.286   4.322   4.326   4.322   4.289   4.282   4.351   4.234
   4.013   4.192   4.400   4.441   4.470   4.548   4.396   4.322   4.386   4.314
   4.066   4.329   4.559   4.776   4.776   4.734   4.628   4.510   4.397   4.419
   4.174   4.509   4.840   5.071   5.168   5.082   4.927   4.733   4.547   4.524
   4.255   4.806   5.275   5.501   5.501   5.481   5.392   5.075   4.910   4.703
   4.526   5.044   5.703   6.111   6.414   6.176   5.892   5.475   5.133   4.873
   4.613   5.298   6.078   6.676   7.014   6.691   6.185   5.847   5.446   5.161
   4.758   5.463   6.199   6.970   7.142   6.998   6.615   6.099   5.705   5.369
   4.819   5.647   6.541   7.044   7.502   7.058   6.769   6.317   5.969   5.651
   5.005   5.762   6.516   7.035   7.317   7.105   6.858   6.433   6.145   5.817
   5.110   5.832   6.616   7.132   7.365   7.199   6.968   6.613   6.316   5.887
   5.258   6.102   6.869   7.458   7.579   7.502   7.160   6.843   6.425   6.078
   5.321   6.395   7.380   7.844   8.069   7.935   7.507   6.981   6.498   6.130
   5.729   6.648   7.670   8.491   8.720   8.466   7.857   7.236   6.690   6.173
   5.819   6.887   7.950   8.861   9.414   8.706   8.074   7.378   6.719   6.201
   5.828   6.854   7.926   8.758   8.971   8.687   7.995   7.289   6.681   6.161
   5.622   6.661   7.706   8.214   8.601   8.308   7.779   7.104   6.573   6.112
   5.496   6.241   7.033   7.539   7.710   7.589   7.267   6.846   6.366   6.033
   5.212   5.845   6.435   6.774   6.979   6.983   6.848   6.494   6.145   5.923
   5.038   5.567   6.017   6.274   6.461   6.514   6.429   6.272   6.001   5.852
   4.926   5.376   5.777   6.022   6.091   6.235   6.214   6.127   5.993   5.859
   4.958   5.312   5.669   5.980   6.039   6.089   6.123   6.106   6.031   6.015
   5.027   5.362   5.754   5.950   6.110   6.144   6.179   6.171   6.135   6.058
   9.497   9.460   9.432   9.460   9.432   9.422   9.458   9.432   9.395   9.357
   9.711   9.711   9.674   9.665   9.665   9.665   9.665   9.674   9.684   9.646
   9.935   9.898   9.898   9.898   9.898   9.898   9.898   9.908   9.908   9.870
  10.123  10.086  10.086  10.086  10.086  10.086  10.086  10.086  10.095  10.057
  10.386  10.338  10.338  10.338  10.338  10.338  10.348  10.348  10.348  10.348
  10.480  10.480  10.441  10.441  10.441  10.411  10.411  10.421  10.421  10.421
  10.612  10.574  10.583  10.545  10.545  10.514  10.579  10.579  10.579  10.579
  10.593  10.593  10.563  10.638  10.598  10.607  10.607  10.607  10.607  10.607
  10.602  10.638  10.657  10.626  10.700  10.700  10.700  10.700  10.732  10.682
  10.621  10.666  10.710  10.719  10.794  10.751  10.751  10.668  10.668  10.649
  10.601  10.760  10.779  10.872  10.882  10.872  10.789  10.770  10.634  10.649
  10.713  10.859  11.067  11.170  11.244  11.115  11.058  10.872  10.717  10.542
  10.854  11.213  11.467  11.671  11.671  11.569  11.310  11.023  10.745  10.498
  11.144  11.680  12.173  12.393  12.277  12.074  11.705  11.244  10.802  10.453
  11.359  12.090  12.892  13.069  13.069  12.665  12.125  11.413  10.752  10.297
  11.383  12.328  13.179  13.743  13.681  13.174  12.246  11.381  10.669  10.129
  11.273  12.243  13.308  13.878  14.214  13.224  12.224  11.274  10.502   9.951
  10.995  11.962  12.886  13.440  13.440  12.859  11.871  10.945  10.238   9.635
  10.552  11.443  12.310  12.640  12.560  12.091  11.333  10.577   9.771   9.250
  10.142  10.844  11.422  11.779  11.712  11.373  10.737  10.071   9.412   8.909
   9.854  10.465  10.829  11.167  11.038  10.789  10.221   9.700   9.067   8.634
   9.662  10.216  10.754  10.939  10.881  10.544  10.063   9.416   8.842   8.365
   9.548  10.237  10.824  11.024  10.873  10.473   9.907   9.214   8.576   8.090
   9.378  10.182  10.780  11.206  11.042  10.503   9.748   8.977   8.300   7.817
   9.110   9.888  10.713  10.993  11.212  10.370   9.424   8.612   8.003   7.537
   8.734   9.433  10.038  10.431  10.261   9.738   8.962   8.171   7.641   7.192
   8.246   8.791   9.368   9.396   9.262   8.769   8.210   7.650   7.079   6.715
   7.564   7.903   8.209   8.283   8.138   7.852   7.370   6.942   6.586   6.241
   6.879   6.962   7.070   7.150   7.078   6.804   6.410   6.202   5.988   5.771
   6.124   6.116   6.102   6.113   6.048   5.857   5.666   5.527   5.396   5.262
   5.522   5.344   5.091   5.097   5.155   4.964   4.846   4.779   4.771   4.761
   4.928   4.681   4.422   4.291   4.242   4.187   4.121   4.109   4.059   4.048
   4.430   4.182   3.790   3.668   3.437   3.538   3.476   3.471   3.371   3.488
19700101  150000                                                               
   3.645   3.742   3.637   3.742   3.634   3.634   3.539   3.637   3.546   3.641
   3.617   3.713   3.713   3.709   3.709   3.613   3.613   3.620   3.624   3.624
   3.683   3.683   3.781   3.781   3.781   3.683   3.683   3.690   3.690   3.690
   3.760   3.760   3.760   3.861   3.760   3.760   3.760   3.760   3.767   3.767
   3.735   3.838   3.838   3.940   3.838   3.838   3.841   3.841   3.848   3.848
   3.779   3.883   3.883   3.883   3.987   3.990   3.997   3.997   3.894   3.897
   3.810   3.810   3.922   3.925   4.030   4.033   4.048   4.048   4.051   3.946
   3.824   3.939   3.943   4.062   4.069   4.073   4.073   4.073   4.073   3.967
   3.837   3.967   4.080   4.084   4.105   4.105   4.105   4.105   3.995   3.992
   3.953   3.981   4.116   4.131   4.256   4.256   4.141   4.116   4.113   4.102
   3.978   4.134   4.286   4.319   4.326   4.315   4.286   4.267   4.226   4.102
   4.027   4.206   4.404   4.444   4.579   4.548   4.389   4.319   4.263   4.197
   4.097   4.347   4.696   4.783   4.783   4.734   4.632   4.514   4.397   4.302
   4.213   4.648   4.973   5.075   5.175   5.086   4.927   4.737   4.442   4.411
   4.422   4.829   5.264   5.505   5.505   5.489   5.262   4.964   4.698   4.500
   4.596   5.067   5.567   5.961   6.119   6.032   5.646   5.259   4.939   4.682
   4.700   5.334   5.936   6.377   6.639   6.399   5.952   5.633   5.248   4.869
   4.857   5.384   6.087   6.686   6.849   6.721   6.261   5.796   5.414   5.096
   4.827   5.588   6.298   6.799   6.979   6.712   6.329   6.017   5.608   5.306
   4.916   5.607   6.222   6.718   6.873   6.796   6.458   6.065   5.805   5.487
   5.036   5.696   6.255   6.736   6.986   6.819   6.612   6.263   5.897   5.579
--------------------------------------------------------

论坛徽章:
4
处女座
日期:2013-09-01 19:30:07双鱼座
日期:2013-09-28 10:58:45双子座
日期:2014-05-23 08:32:0215-16赛季CBA联赛之八一
日期:2016-04-12 19:55:42
9 [报告]
发表于 2006-11-22 19:02 |只看该作者
很想帮你,说来惭愧,我真的不是太清楚你要做什么

论坛徽章:
0
10 [报告]
发表于 2006-11-22 20:31 |只看该作者

回复 1楼 fiowrf 的帖子

Hallo,

try to use complex data structure: see more
perlreftut          Perl references short introduction
perldsc             Perl data structures intro
perllol             Perl data structures: arrays of arrays

For examples, creating datastructure Array of Hashes
think about such as:
$wind_HoA = {
   '"speed" => {
                            "timestamp_1" => [ "per line as element",  ... ], # put data line as one element, don't split it.
                            "timestamp_2" => [ ... ],
                            # more ...
                       },
    "direc"  => {
                           "timestamp_1" => [],
                           #  more .....      
                     },
};

After data structure generated, then access(process the data in the reference of array
, split, modify and caculate it.  


Try again, -- ulmer
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP