다음과 같은 입력이 있습니다.
1. Track 01 05:21
2. Track 02 07:39
3. Track 03 04:27
나는 다음 스크립트를 생각해 냈습니다.
awk -F: '{a+=$(NF-1)*60+$(NF);printf"%d:%02d:%02d\n",a/3600,a%3600/60,a%3600%60}' file
그러나 내가 얻은 결과는 다음과 같습니다.
0:01:21
0:04:00
0:07:27
결과적으로 동일한 스크립트를 사용하여 시간만 포함하고 다른 것은 포함하지 않는 파일이 있으면 올바른 출력을 얻습니다.
입력하다:
05:21
07:39
04:27
산출:
0:05:21
0:13:00
0:17:27
답변1
두 개의 awk 명령을 사용하십시오
awk '{print $NF}' file |awk '{a+=$(NF-1)*60+$(NF);printf"%d:%02d:%02d\n",a/3600,a%3600/60,a%3600%60}'
첫 번째 awk는 파일의 las 필드를 추출하고 두 번째 awk는 원하는 절차를 생성합니다.
시간이 줄의 마지막 필드인 한 파일에 시간만 포함되어 있는지 여부에 관계없이 작동합니다.
답변2
문제는 다음과 같습니다. FS=":" 첫 번째 필드가 "1.Track 01 05"이고 산술 컨텍스트에서 해당 문자열을 사용할 때 첫 번째 숫자가 아닌 숫자는 잘립니다. 따라서 분 값은 " 1". 필드 구분 기호로 공백이나 콜론을 사용해야 하지만 뒤에 공백이 있으면 추가 빈 필드가 있음을 의미합니다.
내가 할게
awk '
BEGIN {h = m = s = 0}
function add_time(min, sec) {
s += sec
m += min
while (s >= 60) {s -= 60; m++}
while (m >= 60) {m -= 60; h++}
}
{
split($NF, t, /:/)
add_time(t[1], t[2])
printf "%d:%02d:%02d\n", h, m, s
}
' file