PAM 2500 荧光数据导出数据整合脚本

PAM 2500导出的数据是以分号为分隔符的纯文本,且一次测量单独保存在文件里,默认以日期加括号里的序号为文件名,我们只需要其中的Fo、Fm和最后一次的数据。

原始数据如下:

 1 "t";"Date";"Time";"No.";"ML";"Temp.";"PAR";"F";"Fm'";"~Fo'";"Y(II)";"Y(NPQ)";"Y(NO)";"NPQ";"qN";"qP";"qL";"ETR";"";
 2        7;28.12.18;17:46:40;Type: IC 
 3        9;28.12.18;17:46:41;default_90.par*
 4        7;28.12.18;17:46:40;1;2; 0.0;0;Fo: 0.548;Fm: 3.018
 5        7;28.12.18;17:46:40;1;2; 0.0;0;0.548;3.018;0.548;0.818;0.000;0.182;0.000;0.000;1.000;1.000;  0.0;;
 6       27;28.12.18;17:47:00;2;2; 0.0;319;2.926;2.979;0.547;0.018;0.013;0.970;0.013;0.071;0.023;0.005;  2.4;;
 7       47;28.12.18;17:47:20;3;2; 0.0;319;2.733;2.891;0.544;0.055;0.040;0.906;0.044;0.182;0.078;0.025;  7.3;;
 8       67;28.12.18;17:47:40;4;2; 0.0;319;2.724;2.797;0.540;0.026;0.071;0.903;0.079;0.279;0.041;0.015;  3.5;;
 9       87;28.12.18;17:48:00;5;2; 0.0;319;2.563;2.661;0.535;0.037;0.114;0.849;0.134;0.274;0.055;0.019;  4.9;;
10      107;28.12.18;17:48:20;6;2; 0.0;319;2.370;2.529;0.529;0.063;0.152;0.785;0.193;0.273;0.089;0.027;  8.4;;
11      127;28.12.18;17:48:40;7;2; 0.0;319;2.168;2.396;0.523;0.095;0.186;0.718;0.260;0.299;0.132;0.040; 12.7;;
12      147;28.12.18;17:49:00;8;2; 0.0;319;1.992;2.293;0.518;0.131;0.209;0.660;0.316;0.325;0.181;0.057; 17.6;;
13      167;28.12.18;17:49:20;9;2; 0.0;319;1.848;2.213;0.514;0.165;0.223;0.612;0.364;0.357;0.230;0.078; 22.1;;
14      187;28.12.18;17:49:40;10;2; 0.0;319;1.729;2.157;0.511;0.198;0.229;0.573;0.399;0.377;0.278;0.099; 26.6;;
15      207;28.12.18;17:50:00;11;2; 0.0;319;1.642;2.124;0.509;0.227;0.229;0.544;0.421;0.394;0.322;0.123; 30.4;;
16      221;28.12.18;17:50:14;File: I_181228_174633.PWS

我们需要以提取第3行和第15行的数据整合成一个新的文件,我们把所有需要整合的文件放在同一文件夹下,运行脚本如下:

use strict;
use warnings;


my @dir;
my @myfiles;
open OUT, ">result.csv";
opendir (DIR, "./") or die "cannot open this directory";
@dir = readdir DIR;
foreach my $file (@dir){
    if ($file =~ /.*\.CSV/){
        push @myfiles, $file;
    }
}
close(DIR);

foreach my $file (@myfiles){
    open IN, "<".$file or die "cannot open $file";
    my @lines = <IN>;
    chomp @lines;
    my @F_start = split(/;/, $lines[4]);
    my @F_end = split(/;/, $lines[15]);
    print OUT $file.",".substr($F_start[7],4,).",".substr($F_start[8],4,).",".join(",",@F_end)."\n";
    close(IN);
}

close(OUT);

手动加入表头行即可,新结果如下:

1 FileName,No,Fo,Fv,Fv/Fm,t,Date,Time,No.,ML,Temp.,PAR,F,Fm',~Fo',Y(II),Y(NPQ),Y(NO),NPQ,qN,qP,qL,ETR
2 20181227_2(7).CSV,NX08,0.493,2.65,0.813962264,207,27.12.18,20:07:20,11,2,0,444,1.466,2.036,0.467,0.28,0.167,0.553,0.302,0.325,0.391,0.155,52.2
3 20181227_2(8).CSV,NX08,0.512,2.751,0.81388586,207,27.12.18,20:11:29,11,2,0,444,1.652,2.169,0.488,0.238,0.161,0.601,0.268,0.297,0.329,0.119,44.4
4 20181227_2(9).CSV,NX08,0.502,2.596,0.806625578,207,27.12.18,20:15:46,11,2,0,444,1.502,1.982,0.474,0.242,0.179,0.579,0.31,0.327,0.341,0.13,45.2
5 20181228(13).CSV,NX09,0.499,2.817,0.8228612,207,28.12.18,17:26:43,11,2,0,319,1.296,2.091,0.47,0.38,0.16,0.46,0.347,0.34,0.519,0.224,50.9
6 20181228(14).CSV,NX09,0.512,2.713,0.811279027,207,28.12.18,17:30:48,11,2,0,319,1.523,2.111,0.486,0.279,0.16,0.561,0.285,0.314,0.389,0.154,37.3
7 20181228(15).CSV,NX09,0.505,2.823,0.821112292,207,28.12.18,17:35:16,11,2,0,319,1.371,2.21,0.481,0.38,0.135,0.486,0.277,0.299,0.516,0.22,50.9

随后可以导入到R中进行统计学分析,比如求各组的平均值,如下

mean <- tapply(data$Fv.Fm,data$No,mean)

 

版本更新(自动加入表头)

use strict;
use warnings;


my @dir;
my @myfiles;
open OUT, ">result.csv";
opendir (DIR, "./") or die "cannot open this directory";
@dir = readdir DIR;
foreach my $file (@dir){
    if ($file =~ /.*\.CSV/){
        push @myfiles, $file;
    }
}
close(DIR);

my $head = "FileName,Fo,Fm,t,Date,Time,No.,ML,Temp.,PAR,F,Fo',Fm',~Fo',Y(II),Y(NPQ),Y(NO),NPQ,qN,qP,qL,ETR";
print OUT $head."\n";

foreach my $file (@myfiles){
    open IN, "<".$file or die "cannot open $file";
    my @lines = <IN>;
    chomp @lines;
    my @F_start = split(/;/, $lines[2]);
    my @F_end = split(/;/, $lines[12]);
    print OUT $file.",".substr($F_start[7],4,).",".substr($F_start[8],4,).",".join(",",@F_end)."\n";
    close(IN);
}


close(OUT);

 

posted @ 2018-12-30 19:48  LiuLyle  阅读(686)  评论(0编辑  收藏  举报