명령줄을 사용하여 텍스트 파일의 시간을 합산하는 방법은 무엇입니까?

명령줄을 사용하여 텍스트 파일의 시간을 합산하는 방법은 무엇입니까?

비행 시간, 시간, 분을 콜론으로 구분하여 한 줄에 하나씩 포함하는 텍스트 파일이 있습니다.

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

저는 현재 Apple의 Numbers 앱을 사용하여 간단한 공식으로 총 시간을 계산하고 있습니다(결과는 다음과 같습니다).4:28위의 샘플 데이터의 경우).

그러나 이것을 달성하는 더 쉬운 방법이 있는지 궁금합니다. Perl 스크립트는 잘 작동하지만 Unix 쉘 명령 및/또는 스크립트를 사용하는 것은 어떻습니까? 나는 기본적으로 짧은 것을 찾고 있습니다.

네, 숫자로 관리할 수는 있지만 알고 배워두면 좋을 것 같아요 :).

p.s. 다른 사람이 필요할 경우를 대비해 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

관련 정보