매일 실행하는 스크립트에 대한 통계를 수집하려고 합니다. 실제로 수면에 소비한 시간이 얼마나 되는지 알고 싶습니다. 모든 수면 주기의 합을 구할 수 있는 방법이 있나요? 예를 들어:
#some task
sleep 5
#some task
sleep 2
결과는 7이 되었으면 좋겠습니다. 스크립트에는 여러 루프와 조건이 포함된 많은 파일이 포함되어 있습니다. 이 솔루션을 사용하려면 스크립트를 실행하여 실제로 수면이 호출되는 내용과 호출 횟수를 확인해야 합니다.
답변1
빠르고 더러운 대답은 grep하고 awk를 사용하여 추가하는 것입니다.
grep -o 'sleep [0-9]\+' input.sh | awk '{ sum +=$2 } END { print sum }'
이는 grep
"input.sh"를 검색하는 것을 의미합니다. 각 줄에는 -o
해당 줄의 일치하는 부분만 인쇄합니다( ). 일치 항목은 sleep
문자열 뒤에 0에서 9 사이의 숫자가 1개 이상 와야 합니다. 이제 인쇄할 내용이 생겼습니다.
sleep 5
sleep 2
이 목록을 여기에 보내고 awk
행별로 처리한 다음 두 번째 열을 모두 합산합니다. 마지막으로 합계를 출력합니다.
참고: 이는 다소 취약한 솔루션입니다. 예를 들어, 주석 처리된 줄이 있는 경우:
# we used to do sleep 1000 here by it was too slow
총계에는 계속 포함됩니다. 스크립트에 대해 더 많이 알면 더 강력한 파이프라인을 만들 수 있습니다. 예를 들어 sleep
호출이 항상 줄의 시작 부분에 있다는 것을 알고 있는 경우 grep을 앵커할 수 있습니다.
grep -o '^sleep [0-9]\+' | ...
그리고 수면시간이 많이 포함된 스크립트도 의심스럽습니다. 자동화를 구성하는 더 나은 방법은 거의 항상 존재하며 절전 모드는 대부분 테스트에만 유용합니다.