파일을 찾은 후 마지막으로 입력한 번호 찾기

파일을 찾은 후 마지막으로 입력한 번호 찾기

질문이 좀 길어서 체크인 및 체크아웃 시스템을 간단하게 만들려고 합니다. 메뉴에 옵션 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: 0Dato:

코드의 명령문은 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

관련 정보