飛行時間、時間、分をコロンで区切って、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とほぼ同じです。
(GNU awkを使用):
awk -F : '{acch+=$1;accm+=$2;} ENDFILE { \ print acch+int(accm/60) ":" accm%60; }' [inputfile]
(「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