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つであるとします。私の質問は、印刷する内容を印刷するにはどうすればよいですか?これを行うより簡単な方法はありますか?

答え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列の内容を印刷し、合計をゼロにリセットし、次の計算を開始します。}

この情報はすべて必要ないので、{"\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を介してrootとしてこのコマンドを実行する必要があるかもしれません。

関連情報