次の形式の入力ファイルがあります
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";
}