나는 이 문제에 대해 큰 진전을 이루었고 필요한 모든 정보를 필터링할 수 있었지만 숫자를 요약하면 실행되지만 아무것도 인쇄되지 않습니다.
이것이 내가 가진 것입니다. sudo usbtop
다음과 같이 모든 것을 뱉어냅니다.
$sudo usbtop
Bus ID 0 (All USB buses) To device From device
Device ID 1 : 0.00 KiB/s 0.00 KiB/s
Device ID 5 : 119.42 KiB/s 29620.68 KiB/s
Device ID 7 : 133.55 KiB/s 30097.61 KiB/s
Device ID 8 : 146.48 KiB/s 30035.24 KiB/s
Device ID 11 : 403.09 KiB/s 116395.06 KiB/s
Device ID 13 : 145.12 KiB/s 30221.49 KiB/s
Device ID 15 : 402.34 KiB/s 116173.13 KiB/s
Device ID 17 : 408.02 KiB/s 117784.73 KiB/s
Device ID 22 : 402.31 KiB/s 116166.17 KiB/s
Device ID 24 : 402.57 KiB/s 116242.83 KiB/s
Device ID 25 : 402.62 KiB/s 116255.38 KiB/s
Device ID 26 : 14.44 KiB/s 7267.52 KiB/s
Device ID 27 : 14.44 KiB/s 7267.78 KiB/s
Device ID 28 : 12.08 KiB/s 6056.14 KiB/s
Bus ID 1 (USB bus number 1) To device From device
Device ID 1 : 0.00 KiB/s 0.00 KiB/s
Device ID 5 : 119.42 KiB/s 29620.57 KiB/s
Device ID 7 : 133.55 KiB/s 30098.21 KiB/s
Device ID 8 : 146.48 KiB/s 30035.24 KiB/s
Device ID 13 : 145.12 KiB/s 30221.49 KiB/s
Bus ID 2 (USB bus number 2) To device From device
Device ID 11 : 403.33 KiB/s 116470.63 KiB/s
Device ID 15 : 401.87 KiB/s 116056.23 KiB/s
Device ID 17 : 407.62 KiB/s 117657.41 KiB/s
Device ID 22 : 401.91 KiB/s 116032.60 KiB/s
Device ID 23 : 0.00 KiB/s 0.00 KiB/s
Device ID 24 : 401.93 KiB/s 116068.74 KiB/s
Device ID 25 : 402.19 KiB/s 116149.45 KiB/s
Device ID 26 : 10.49 KiB/s 4707.21 KiB/s
Device ID 27 : 11.77 KiB/s 5874.43 KiB/s
Device ID 28 : 13.06 KiB/s 6518.48 KiB/s
필요한 부분을 필터링하기 위해 이 grep을 사용하여 usbtop을 파이프했습니다.
$sudo usbtop | grep -A 10 "Bus ID 2"
Bus ID 0 (All USB buses) To device From device
--
Bus ID 2 (USB bus number 2) To device From device
Device ID 11 : 390.70 KiB/s 112829.82 KiB/s
Device ID 15 : 167.34 KiB/s 48399.99 KiB/s
Device ID 17 : 397.52 KiB/s 114774.77 KiB/s
Device ID 22 : 389.77 KiB/s 112561.07 KiB/s
Device ID 24 : 390.87 KiB/s 112874.51 KiB/s
Device ID 25 : 336.29 KiB/s 97280.79 KiB/s
Device ID 26 : 13.07 KiB/s 6525.58 KiB/s
Device ID 27 : 13.60 KiB/s 6786.53 KiB/s
Device ID 28 : 11.35 KiB/s 5666.02 KiB/s
awk 파이프를 추가하면 필요한 열을 얻을 수 있습니다. 열에 몇 가지 문자열이 포함되어 있습니다.
sudo usbtop | grep -A 10 "Bus ID 2" | awk '{print $7}'
To
2)
116402.05
116149.45
116125.79
100062.28
118302.52
115981.20
6055.99
if 문을 추가하여 문자열을 필터링할 수 있습니다.
sudo usbtop | grep -A 10 "Bus ID 2" | awk '{if ($1=="Device") print $7}'
116402.05
116149.45
116125.79
100062.28
118302.52
115981.20
6055.99
하지만 이 주석은 실행되지만 아무것도 반환하지 않습니다.
sudo usbtop | grep -A 10 "Bus ID 2" | awk '{if ($1=="Device") sum+=$7} END {print sum}'
숨겨진 문자열에 갇히거나 전달된 값을 끝나지 않고 계속 합산하는 중 하나라고 가정하고 있습니다. 내 질문은 인쇄해야 할 내용을 인쇄하려면 어떻게 해야 합니까? 이 작업을 수행하는 더 쉬운 방법이 있나요?
답변1
내 솔루션
이 문제에 적합한 스크립트를 찾았습니다.
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}
y열의 값이 true를 반환하면 x열의 행을 합산합니다.
(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을 통해 루트로 이 명령을 실행해야 할 수도 있습니다.