最初の列に基づいて行をグループ化し、すべての2番目の行値の合計とすべての3番目の行値の合計を計算する必要があります。
2番目の列は10:56 = 10 * 60 + 56 = 656秒として計算する必要があります。
入力ファイル:
testing 00:34 123487
archive 00:45 3973
testing 09:16 800500
archive 10:10 100000
出力:
archive 655 103973
testing 590 923987
ベストアンサー1
ゴルフをするときは、ショットを一度だけ打つ。 GNU awk 3.1.7でうまく動作します。他のawkの実装は$2*60
。substr($2,0,2)*60
(整数値9と解釈するために「09:16」のようなものを拡張すると、ルールは少し拡張されます。)
awk '{a[$1]+=$2*60+substr($2,4);b[$1]+=$3}END{for(c in a){print c,a[c],b[c]}}'
出力は次のとおりです。
archive 655 103973
testing 590 923987
またはPerlメソッド:
perl -e 'while(<>){/(\S+) +(\d+):(\d+) (\d+)/;$a{$1}+=$2*60+$3;$b{$1}+=$4;}for(keys %a){print "$_ $a{$_} $b{$_}\n"}'