awk의 행 간 타임스탬프 계산 또는 합계

awk의 행 간 타임스탬프 계산 또는 합계

다음과 같은 입력이 있습니다.

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

관련 정보