시간 명령에 대한 사용자 정의 형식
bash 스크립트 에서 time 명령 을 사용하여 스크립트 의 경과 시간을 계산하고 로그 파일에 쓰고 싶습니다 . 사용자와 시스템이 아닌 실시간 만 필요합니다 . 또한 적절한 형식으로 필요합니다. 예 : 00 : 00 : 00 : 00 (표준 출력과 같지 않음). 조언을 부탁드립니다.
예상 형식은 00:00:00.0000
(밀리 초) [시간] : [분] : [초]. [밀리 초]입니다.
이미 3 개의 스크립트가 있습니다. 다음과 같은 예를 보았습니다.
{ time { # section code goes here } } 2> timing.log
그러나 나는 사용자와 시스템이 아닌 실시간 만 필요합니다. 또한 적절한 형식으로 필요합니다. 예 00:00:00:00
(표준 출력과 같지 않음).
즉, 시간 출력을 처리하기 쉬운 것으로 바꾸는 방법을 알고 싶습니다.
date
명령을 사용하여 시간을 정할 작업을 수행하기 전후의 현재 시간을 가져오고 다음과 같이 차이를 계산할 수 있습니다.
#!/bin/bash
# Get time as a UNIX timestamp (seconds elapsed since Jan 1, 1970 0:00 UTC)
T="$(date +%s)"
# Do some work here
sleep 2
T="$(($(date +%s)-T))"
echo "Time in seconds: ${T}"
printf "Pretty format: %02d:%02d:%02d:%02d\n" "$((T/86400))" "$((T/3600%24))" "$((T/60%60))" "$((T%60))""
: 주 $은 ((...)) 기본적인 산술에 사용할 수있는 bash는 마이너스하기 전에 공백을 넣지 마십시오 : -주의 - 이 명령 줄 옵션으로 해석 될 수있다.
참조 : http://tldp.org/LDP/abs/html/arithexp.html
편집 :
또한 시간에 의해 생성 된 출력에서 부분 문자열을 검색하고 추출하기 위해 sed 를 살펴볼 수 있습니다 .
편집하다:
밀리 초를 사용한 타이밍의 예 (실제로는 나노초이지만 여기서는 밀리 초로 잘림). 의 버전이 형식 date
을 지원 해야하며 큰 숫자를 지원해야합니다.%N
bash
# UNIX timestamp concatenated with nanoseconds
T="$(date +%s%N)"
# Do some work here
sleep 2
# Time interval in nanoseconds
T="$(($(date +%s%N)-T))"
# Seconds
S="$((T/1000000000))"
# Milliseconds
M="$((T/1000000))"
echo "Time in nanoseconds: ${T}"
printf "Pretty format: %02d:%02d:%02d:%02d.%03d\n" "$((S/86400))" "$((S/3600%24))" "$((S/60%60))" "$((S%60))" "${M}"
면책 조항 :
내 원래 버전은
M="$((T%1000000000/1000000))"
그러나 이것은 새 버전이 작동하는 반면 일부 사람들에게는 작동하지 않았기 때문에 편집되었습니다. 나머지 만 사용하면된다고 생각하지만 찬성하지 않았습니다.
당신에게 맞는 것을 선택하십시오.
- time이라는 셸 내장이있을 수 있습니다.
/usr/bin/time
형식 문자열을 제공 할 수 있으며 형식 옵션 중 하나는 경과 시간입니다.
%E
/usr/bin/time -f'%E' $CMD
예:
$ /usr/bin/time -f'%E' ls /tmp/mako/
res.py res.pyc
0:00.01
이 변수를 설정하는 time
대신 Bash 내장을 사용하려면 /bin/time
:
TIMEFORMAT='%3R'
which will output the real time that looks like this:
5.009
or
65.233
The number specifies the precision and can range from 0 to 3 (the default).
You can use:
TIMEFORMAT='%3lR'
to get output that looks like:
3m10.022s
The l
(ell) gives a long format.
Use the bash built-in variable SECONDS
. Each time you reference the variable it will return the elapsed time since the script invocation.
Example:
echo "Start $SECONDS"
sleep 10
echo "Middle $SECONDS"
sleep 10
echo "End $SECONDS"
Output:
Start 0
Middle 10
End 20
Not quite sure what you are asking, have you tried:
time yourscript | tail -n1 >log
Edit: ok, so you know how to get the times out and you just want to change the format. It would help if you described what format you want, but here are some things to try:
time -p script
This changes the output to one time per line in seconds with decimals. You only want the real time, not the other two so to get the number of seconds use:
time -p script | tail -n 3 | head -n 1
참고URL : https://stackoverflow.com/questions/3683434/custom-format-for-time-command
'Program Tip' 카테고리의 다른 글
변수, 객체 및 참조의 차이점은 무엇입니까? (0) | 2020.11.06 |
---|---|
Python의 AWS Lambda 가져 오기 모듈 오류 (0) | 2020.11.06 |
node.js에서 데이터베이스를 조롱합니까? (0) | 2020.11.06 |
쉘 (awk, sed 등)을 사용하여 파일에서 처음 두 열을 제거하는 방법 (0) | 2020.11.06 |
원격 모달이있는 부트 스트랩 3 (0) | 2020.11.06 |