비행 시간, 시간, 분을 콜론으로 구분하여 한 줄에 하나씩 포함하는 텍스트 파일이 있습니다.
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과 거의 동일합니다.
(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