我有一个格式如下的输入文件
ant,1
bat,1
bat,2
cat,4
cat,1
cat,2
dog,4
我需要为每个键(column1)聚合 col2,所以结果是:
ant,1
bat,3
cat,7
dog,4
其他注意事项:
- 假设输入文件已排序
- 输入文件非常大(大约1M行),所以我不想使用数组并占用内存
- 每个输入行都应该在我们读取它时进行处理,并移至下一行
- 我需要将结果写入 outFile
- 我需要在 Perl 中执行此操作,但伪代码或算法会有所帮助
谢谢!
这就是我想出的......想看看这是否可以写得更好/优雅。
open infile, outFile
prev_line = <infile>;
print_line = $prev_line;
while(<>){
curr_line = $_;
@prev_cols=split(',', $prev_line);
@curr_cols=split(',', $curr_line);
if ( $prev_cols[0] eq $curr_cols[0] ){
$prev_cols[1] += curr_cols[1];
$print_line = "$prev_cols[0],$prev_cols[1]\n";
$print_flag = 0;
}
else{
$print outFile "$print_line";
$print_flag = 1;
$print_line = $curr_line;
}
$prev_line = $curr_line;
}
if($print_flag = 1){
print outFile "$curr_line";
}
else{
print outFile "$print_line";
}