Как я могу манипулировать определенным выводом в Bash (время безотказной работы)? - PullRequest
0 голосов
/ 12 июня 2019

Итак, я экспериментировал с Bash не так давно, и я хочу манипулировать выводом команды uptime.Мне удалось изменить выходное значение с x минут до 0:05, например, если время работы составляет 5 минут, но все остальное исчезает.

Какой метод следует использовать для отображения времени,количество пользователей и их средняя загрузка без влияния на мой текущий вывод времени работы.

Это желаемый вывод: 21:08:13 до 0:10, 3 пользователя, средняя загрузка: 0,30, 0,30, 0,25

Буду признателен за любую помощь!

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

Ответы [ 2 ]

1 голос
/ 12 июня 2019

Используя ваш вывод в файл с именем date, я попробовал это:

cat date | awk '{print $1 " "  $2 " "  0 ":"  $3  "," $5 " " $6 " " $7 " " $8 " " $9 " " $10 " " $11}'

21:08:13 up 0:10,4 users, load average: 0.30, 0.30, 0.25
1 голос
/ 12 июня 2019

Это может быть способ использования только времени безотказной работы, даты и, конечно, bash:

#!/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))

printf "%d(days), %02d:%02d:%02d(hms)\n" $days $hr $min $sec
...