Я нашел сценарий, который работает для решения этой проблемы.
sudo usbtop | grep -A 10 "Bus ID 2" | awk '{if ($1 == "Device") sum+=$7} (NR%12==0){avg=sum/12;print $7"\nTotal: "sum "\tAverage: "avg;sum=0;next}'
{if ($1 == "Device") sum+=$7}
суммирует строки в столбце x, если значение в столбце y возвращает значение true
(NR%12==0)
считает каждые x строк
{avg=sum/12;print $7"\nTotal: "sum "\tAverage: "avg;sum=0;next}
{вычисляет среднее значение; печатает содержимое столбца x; распечатывает рассчитанные результаты; сбрасывает итог на 0; и начинает следующую серию вычислений}
Мне не нужна была вся эта информация, так что {"\nTotal: "sum;sum=0;next}
мне хватило.
Отправка в виде команды через ssh:
ssh -t domain@hostIP -a "sudo usbtop | grep -A 12 'Bus ID 2' | awk '{if(\$3>0) sum+=\$7/1000} (NR%10==0){print "'"Total: "'" sum;sum=0;next}'"
где -t
открывает сеанс терминала и -a
извлекает результаты на вашу машину перед локальным запуском команды (Я не смог найти, как запустить команду удаленно ), обратите внимание, что вам нужно избегайте вложенных кавычек и символов $, поэтому " ' "
необходимо для записи итога в виде строки и \$
для ссылок на столбцы.
как команда Python с выводом в файл:
output_file = 'text.txt'
command = '''ssh -t domain@hostIP -a "usbtop | grep -A 10 'Bus ID 2' | awk '{if(\$3>0) sum+=\$7} (NR%10==0){print "'"Total: "'" sum;sum=0;next}'" >>''' + output_file
Вы можете написать sum+=\$7/1000
, чтобы преобразовать выходные данные usbtop в мегабайты и так далее.
ПРИМЕЧАНИЕ. :Возможно, вам придется запустить команду через python от имени пользователя root.