特定の列に基づく合計

特定の列に基づく合計

私は3000万から4000万のデータ項目の間にある多くのデータを持っています。私たちはこれらのファイルを処理して他のインターフェースチームに送信する必要があります。

以下は私たちが受け取ったファイル形式です。

c1  c2  c3  c4  c5  c6
A   B   C   D   5   s
A   B   C   D   4   s
A   B   E   F   5   s
A   B   E   F   8   S
C   D   E   F   9   S

出力ファイルのすべての列を印刷する必要があります。これはGPRSの使用に関連しているため、グループ化する必要があります。c1-c4その後、すべてが一致した場合は要約する必要があります。c5をクリックしてファイルの内容をすべて印刷します。

以下はサンプル出力ファイルです。

c1  c2  c3  c4  c5  c6
A   B   C   D   9   s
A   B   E   F   13  s
C   D   E   F   9   s

また、このワークフローはUnixスクリプトよりもPerlではるかに速く実行されると聞きました。

ベストアンサー1

perl@terdonの答えと似ていますが、より良い形式の出力を提供する別の解決策は次のとおりです。

$ perl -alne '
    (print && next) if $. == 1;   
    $h{"@F[0..3]"}{s} += $F[4];
    $h{"@F[0..3]"}{t}  = $F[5];
    END {
        for (keys %h) {
            printf "%-4s%-4s%-4s%-4s%-4s%-4s",split(" ",$_),$h{$_}{s},$h{$_}{t};                        
            printf "\n";
        }
    }' file
c1  c2  c3  c4  c5  c6
A   B   E   F   13  S   
A   B   C   D   9   s   
C   D   E   F   9   S

おすすめ記事