perl中同时读取两个文件并进行对应计算
发布时间:2020-12-16 00:27:47 所属栏目:大数据 来源:网络整理
导读:用句柄读取大文件进数组是很占内存的事,所以,一边读数据,一边处理数据,处理完之后就直接输出到文件,这是个很靠谱的想法,尤其是处理特大数据的时候,这个想法尤其珍贵。下面是具体例子: 输入文件1: 31 032 033 034 035 036 037 038 039 040 041 042 0
用句柄读取大文件进数组是很占内存的事,所以,一边读数据,一边处理数据,处理完之后就直接输出到文件,这是个很靠谱的想法,尤其是处理特大数据的时候,这个想法尤其珍贵。下面是具体例子: 输入文件1: 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 42 0.95 43 0 44 0 输入文件2: 92 0 93 0 94 0 95 0 96 0 97 0 98 0 99 0 100 0 101 0 102 0 103 0 104 0 105 0 106 0 107 0 108 0 109 0 110 0.138888888888889 111 0 112 0 113 0 114 0 115 0 116 0 117 0 118 0 处理代码: #!/usr/bin/perl use strict; use warnings; my $pb_file = shift; #read file of polar bear my $bb_file = shift; #read file of blown bear my $n1 = 18; my $n2 = 10; open (AA,"$pb_file") or die "$!"; open (BB,"$bb_file") or die "$!"; open (CC,">a_ab.txt") or die "$!"; my $aa; my $bb = <BB>; while( $aa = <AA> ){ my @pb = split /s+/,$aa; my @bb = split /s+/,$bb; while ($pb[0] ne $bb[0]){ if ( $pb[0] > $bb[0]){ $bb = <BB>; @bb = split /s+/,$bb; }else{ $aa = <AA>; @pb = split /s+/,$aa; } } my $p12_2 = ($pb[1] - $bb[1])*($pb[1] - $bb[1]); my $alpha1 = 2 * $pb[1] * (1 - $pb[1]); my $alpha2 = 2 * $bb[1] * (1 - $bb[1]); my $a = $p12_2 - ($n1+$n2)*($n1*$alpha1 + $n2*$alpha2) / 4*$n1*$n2*($n1+$n2-1); my $b = $p12_2 + (4*$n1*$n2-$n1-$n2)*($n1*$alpha1 + $n2*$alpha2) / 4*$n1*$n2*($n1+$n2-1); my $fst; if ($a == 0){ $fst = 0; }else{ $fst = $a / ($a + $b);} print CC "$bb[0]t$at$bt$fsttn"; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |