最初の列に基づいてすべての行をグループ化し、2番目と3番目の列の合計を計算します。

最初の列に基づいてすべての行をグループ化し、2番目と3番目の列の合計を計算します。

最初の列に基づいて行をグループ化し、すべての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*60substr($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"}'

おすすめ記事