как обновить вывод переменной в несколько строк без очистки экрана - PullRequest
0 голосов
/ 19 мая 2019

Я пытаюсь отследить файл журнала, а затем отобразить количество вызовов конкретных запросов, в выходных данных будет показана строка заголовка, в которой указаны имена каждого запроса «PUT GET HEAD» и ниже количества запросов каждого узла. за строку Мне нужно обновить вывод переменных, которые показывают счетчик каждые 1 сек

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

#!/usr/bin/bash

#variables
MYIP=$(ifconfig eth1|grep -w 'inet'| awk '{print $2}')
BASEIP=$(echo $XIP | cut -d"." -f-3)

MONPUT=$(cat $HTTPLOG  | grep -w "PUT" |awk '{print $9}'| grep -E "20"| wc -l)
MONHEAD=$(cat $HTTPLOG  | grep -w "HEAD" | awk '{print $9}'| grep -E "20" |wc -l)
MONGET=$(cat $HTTPLOG  | grep -w "GET" | awk '{print $9}'| grep -E "20" |wc -l)
MONDEL=$(cat $HTTPLOG  | grep -w "DELETE" | awk '{print $9}'| grep -E "20" |wc -l)


# header 
printf "%15s" "Node " |tr '\n' '\t'
printf "%15s"  'PUT'  | tr '\n' '\t'
printf "%15s" 'HEAD' | tr '\n' '\t'
printf "%15s"  'GET'  | tr '\n' '\t'
printf "%15s"  'DELETE'  | tr '\n' ' '

# starting the loop

while [[ true ]]
do 
i=(1)

for (( x=1; x<=3; x++))
do 
((i = i + 1))
NODEIP="$BASEIP.$i"
ssh $NODEIP printf "%15s" "$GETNAME" "$MONPUT" "$MONHEAD" "$MONGET" "$MONDEL"
done

echo -ne "\033[3A\r"
done

вот ожидаемый результат:

Узел PUT - HEAD - GET - DELETE узел-2 1849 2183 41387 0

#

узел-3 5339 8534 40838 0

#

узел-4 1829 2196 46503 0

#

ожидаемый результат: должен отображаться так же, как указано выше, в то время как числа обновляются каждые 1 сек

1 Ответ

0 голосов
/ 20 мая 2019

Я согласен с UtLox, что, вообще говоря, ncurses - ваш лучший вариант.Имея это в виду, пожалуйста, взгляните на bashsimplecurses:

Git-репо

Учебное пособие

Базовый пример

...