예를 들어 탭으로 구분된 파일이 있습니다.
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
하고 min
0으로 채웁니다.