Bash 스크립트를 사용하여 수치 차이를 계산하고 콜론으로 구분된 시간 형식으로 저장합니다.

Bash 스크립트를 사용하여 수치 차이를 계산하고 콜론으로 구분된 시간 형식으로 저장합니다.

예를 들어 탭으로 구분된 파일이 있습니다.

0018803 01  1710    2050    002571      
0018951 01  1934    2525    003277  
0019362 02  2404    2415    002829  
0019392 01  2621    2820    001924  
0019542 01  2208    2413    003434  
0019583 01  1815    2134    002971   

3열과 4열은 HHMM 형식의 시작 시간과 종료 시간을 나타냅니다. 시작 시간이나 종료 시간이 자정을 넘으면 계속해서 시간이 추가됩니다.

나는 6열에 경과 시간을 시와 분 단위로 표시하고 싶습니다(4열에서 3열을 뺀 값).

이 예에서 열 6의 결과는 3:40, 5:51, 00:11, 1:59, 입니다 2:05.

답변1

안녕하세요. 시작 시간과 종료 시간은 항상 4자라고 가정합니다.

awk 'NF {hrs = substr($4, 1, 2) - substr($3, 1, 2); min = substr($4, 3, 4) - substr($3, 3, 4); if(min<0) {hrs--; min = 60 + min}; printf "%s\t%02d:%02d\n", $0, hrs, min}'

설명하다:

NF: 필드 수, 빈 줄을 건너뛰기 위한 것입니다.

hrs = substr($4, 1, 2) - substr($3, 1, 2);: 열 4의 처음 2자를 가져오고 열 3의 처음 2자를 빼고 이를 변수에 할당합니다 hrs.

min = substr($4, 3, 4) - substr($3, 3, 4);: 분의 마지막 2자를 사용하여 마지막 논리를 반복합니다.

if(min<0) {hrs--; min = 60 + min};: 분이 음수이면 시에서 1을 빼고 60에 음수를 더한 결과를 변수에 대입합니다 min.

printf "%s\t%02d:%02d\n", $0, hrs, min:마지막으로 모든 행과 변수를 인쇄 hrs하고 min0으로 채웁니다.

관련 정보