usbtop 명령의 매우 구체적인 부분을 요약하려면

usbtop 명령의 매우 구체적인 부분을 요약하려면

나는 이 문제에 대해 큰 진전을 이루었고 필요한 모든 정보를 필터링할 수 있었지만 숫자를 요약하면 실행되지만 아무것도 인쇄되지 않습니다.

이것이 내가 가진 것입니다. 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/1000usbtop 출력을 메가바이트 등으로 변환하기 위해 쓸 수 있습니다 .

참고: Python을 통해 루트로 이 명령을 실행해야 할 수도 있습니다.

관련 정보