コマンドラインを使用してテキストファイルの時間を合計する方法は?

コマンドラインを使用してテキストファイルの時間を合計する方法は?

飛行時間、時間、分をコロンで区切って、1行に1つずつ含むテキストファイルがあります。

00:50
00:41
00:43
00:50
01:24

私は現在、AppleのNumbersアプリを使用して単純な公式で合計時間を計算しています(結果は次のとおりです)。4:28上記のサンプルデータの場合)。

しかし、これを達成するより簡単な方法があるかどうか疑問に思います。 Perlスクリプトはうまく機能しますが、Unixシェルコマンドやスクリプトを使用するのはどうですか?私は基本的に短いものを探しています。

はい、数字で管理することはできますが、知って学んでおくと良いと思います:)。

ps他の人が必要な場合に備えて、Perlスクリプトを投稿してください。

#! /usr/bin/perl
while (<>) {
  chomp;
  ($hours, $minutes) = split (/:/, $_);
  $totalhours += $hours;
  $totalminutes += $minutes; 
}
while ($totalminutes > 59) {
  $totalhours++;
  $totalminutes -= 60;
}
printf ("%d:%02d\n", $totalhours, $totalminutes);

答え1

あなたが知っているように、多くの可能性があります。 awkを含む次のバージョンは、あなたの質問に含まれているPerlとほぼ同じです。

  1. (GNU awkを使用):

    awk -F : '{acch+=$1;accm+=$2;} ENDFILE { \
    print acch+int(accm/60)  ":" accm%60; }' [inputfile]
    
  2. (「POSIX」awkを使用):

    awk -F : '{acch+=$1;accm+=$2;print acch+int(accm/60) \
                 ":" accm%60; }' [inputfile] | tail -1
    

答え2

Perlの「一行」バージョン:

perl -F: -lane '$a+=$F[0]*60+$F[1];END{printf "%02d:%02d\n",$a/60,$a%60}' file

答え3

これはすべてのPOSIX互換シェルで機能します。

#!/bin/sh
# usage: time-add.sh < times.txt
sum=0
while IFS=: read -r hours minutes; do
    sum=$(($sum + $hours * 60 + $minutes))
done
total=$(($sum / 60)):$(($sum % 60))
echo $total

関連情報