Bash заменяет часть вывода строкой - PullRequest
0 голосов
/ 13 июня 2019

У меня есть эта команда, которая получает определенный вывод;команда;

uptime | sed -e 's/^[ \t]*//' > temp                    
awk '{ sub(" min","") sub("users", "user");print > "temp" }' ./temp     

Когда я делаю cat temp, вывод становится:

13: 24: 16 до 1:33, 3 пользователя, средняя загрузка: 0,30, 0,56, 0,63

Я хочу заменить 1:33 на это новое время, которое я создал с помощью этой команды;

awk '{printf("%02d:%02d\n",($1/60/60%24),($1/60%60))}' /proc/uptime > temp2

Получается в качестве результата;

01:33

Итак, в двух словах,Я хочу заменить 1:33 в выводе первой команды на вывод второй команды 01:33.Я гуглил и пытался, но все время терпел неудачу, поэтому я решил приехать сюда.Я нашел решения с помощью sed, awk и grep.Но я не могу найти идеальный вариант для этой проблемы.

Ответы [ 2 ]

0 голосов
/ 13 июня 2019

Похоже, вы пытаетесь преобразовать удобочитаемое время в HH:MM:SS:

uptime | awk '
  NR==1 {t = sprintf("%02d:%02d:%02d", $1/3600, $1%3600/60, $1%60); next}
        {split($0, a, "  "); print $1, $2, t, a[2], a[3]}
' /proc/uptime -
10:24:39 up 00:53:05 1 users, load average: 0.52, 0.58, 0.59
0 голосов
/ 13 июня 2019

Сопоставьте строку с регулярным выражением и замените на sed.

echo '13:24:16 up 1:33, 3 user, load average: 0.30, 0.56, 0.63' | 
sed 's/up [^,]*,/up '"$(awk '{printf("%02d:%02d\n",($1/60/60%24),($1/60%60))}' /proc/uptime)"',/'

выведет (в моей системе):

13:24:16 up 03:58, 3 user, load average: 0.30, 0.56, 0.63
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...