그래서 나는 얼마 전에 Bash를 실험해왔고 "uptime" 명령의 출력을 조작하고 싶었습니다. 예를 들어 가동 시간이 5분인데 나머지는 사라지는 경우 up x 분의 출력을 0:05로 변경했습니다.
현재 가동 시간 출력에 영향을 주지 않고 시간, 사용자 수 및 로드 평균을 표시하려면 어떤 방법을 사용해야 합니까?
원하는 출력은 다음과 같습니다.21:08:13 up 0:10, 3 users, load average: 0.30, 0.30, 0.25
어떤 도움이라도 대단히 감사하겠습니다!
#!/bin/bash
since="`uptime --since`"
start="`date --date "$since" '+%s'`"
now="`date '+%s'`"
sec=$((now-start))
days=$((sec/(60*60*24)))
sec=$((sec-days*(60*60*24)))
hr=$((sec/(60*60)))
sec=$((sec-hr*(60*60)))
min=$((sec/60))
sec=$((sec-min*60))
rest="$(uptime | perl -npe'{s/(.*,\s+)(\d+\s+user)/$2/}')"
printf "%d(days), %02d:%02d:%02d(hms), %s\n" $days $hr $min $sec "$rest"
전류 출력
0(days), 00:34:00(hms), 3 users, load average: 0.09, 0.14, 0.14
답변1
한 가지 방법은 Perl을 사용하는 것입니다. 이것은 단지 줄을 추가하고 printf
줄을 변경합니다.
rest="$(uptime | perl -npe'{s/(.*,\s+)(\d+\s+user)/$2/}')"
printf "%d(days), %02d:%02d:%02d(hms), %s\n" $days $hr $min $sec "$rest"
결과:
00:55:21 up 10 days, 2:38, 1 user, load average: 0.05, 0.06, 0.07
한 필드가 여전히 누락되어 있습니다. 다음을 비교해 보세요.
$ ./uptime.bash
10(days), 02:45:06(hms), 1 user, load average: 0.02, 0.03, 0.04
$ uptime
01:02:10 up 10 days, 2:45, 1 user, load average: 0.02, 0.03, 0.04