질문이 좀 길어서 체크인 및 체크아웃 시스템을 간단하게 만들려고 합니다. 메뉴에 옵션 1을 사용하여 체크인하고 2번 옵션을 사용하여 하루를 마치고 집에 돌아올 때 체크아웃합니다. 내 파일에는 다음이 포함됩니다.
Dato: 22-02-2018
Mødt ind: 700
Gået hjem: 1600
Overtid:
Dato: 23-02-2018
Mødt ind: 730
Gået hjem: 1600
Overtid:
이 파일에서 730과 1600의 차이점을 찾아야 합니다. 숫자가 800보다 높으면 숫자를 인쇄해야 합니다(차이가 있는 경우). 내 문제를 이해해 주시기 바랍니다.
답변1
Overtid:
이것이 채우려는 내용 이라면 다음을 수행할 수 있습니다.
awk 'function overtime(s,e) {
if (s) printf("Overtid: %d\n", (e - s > 800) ? e - s : 0);
}
/^Mødt ind:/ { start = $NF; print }
/^Gået hjem:/ { end = $NF; print }
/^Dato:/ { overtime(start, end); print }
END { overtime(start, end) }' file
이는 데이터에서 시작 및 종료 시간을 선택하고 Dato:
각 행의 이전 레코드에 대한 초과 근무 시간을 인쇄합니다(데이터의 새 레코드를 나타냄). 이는 END
끝(블록)에서도 수행됩니다.
overtime()
스크립트의 서로 다른 두 위치에서 동일한 작업을 수행해야 하기 때문에 함수로 수행했습니다 . 데이터의 첫 번째 행에 도달할 때 가짜 출력을 얻지 않도록 if (s)
함수 에 포함합니다 .Overtid: 0
Dato:
코드의 명령문은 print
기존 데이터를 출력에 전달합니다.
데이터를 출력합니다:
Dato: 22-02-2018
Mødt ind: 700
Gået hjem: 1600
Overtid: 900
Dato: 23-02-2018
Mødt ind: 730
Gået hjem: 1600
Overtid: 870