私はこの問題について大きな進歩を遂げ、必要なすべての情報をフィルタリングできましたが、数字を要約すると実行されますが、何も印刷されません。
これが私が持っているものです。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/1000
usbtop出力をメガバイトなどに変換するために書き込むことができます。
注:Pythonを介してrootとしてこのコマンドを実行する必要があるかもしれません。