コマンド出力から最大温度値を抽出し、次のシェル変数に保存したいと思います。
res="$(get temperature all)"
結果は次のとおりです。
Device 0 avs data:
Temperature: 33.5 C
voltage1V0: 0.926 V
voltage1V8: 1.782 V
voltage3V3: 3.265 V
Device 1 avs data:
Temperature: 32.6 C
voltage1V0: 0.923 V
voltage1V8: 1.780 V
voltage3V3: 3.265 V
Device 2 avs data:
Temperature: 33.1 C
voltage1V0: 0.920 V
voltage1V8: 1.785 V
voltage3V3: 3.290 V
Device 3 avs data:
Temperature: 33.1 C
voltage1V0: 0.921 V
voltage1V8: 1.780 V
voltage3V3: 3.265 V
Temperature:
文字列間の数値を抽出し、C
すべてのデバイス履歴で最大値を見つけたいです。上記の場合、出力は次のようになります。
33.5
温度値が33.5、32.6、33.1、33.1であるため
上記のコマンドの出力は次のようになります。
- 時にはただの情報だけですが
Device 0
、 - 時には情報
Device 0
Device 1
- 時々
Device 0
、、、情報Device 1
Device 3
Device 4
したがって、最高温度を求めるロジックは、デバイスの数に関係なく普遍的でなければなりません(最大数は4つですが、使用可能な最小デバイス数は1つです)。
たとえば、デバイスが1つしかない場合、最大温度はデバイス0の温度と同じでなければならず、そうでない場合は比較して印刷する必要があります。
編集1- 必ず使用する必要があるか、sed
オプションawk
はgrep -P
提供されません。
echo 'Here is a string, and Here is another string.' | grep -oP '(?<=Here).*(?=string)'
grep: invalid option -- 'P'
答え1
各デバイスには以下を含めることができると仮定します。単一「温度」を読み、最大値のみを印刷したい場合(関連するデバイス番号は印刷しない)、次のことを試すことができます。
awk '$1=="Temperature:" {if ($2>max) max=$2} END{printf("Maximum: %.1f\n",max)}'
次に、スペースで区切られた最初のフィールド()を含む$1
すべての行を解析し、数値温度値であるTemperature:
2番目のフィールド()を確認します。$2
値がこれまでの最大値より大きい場合、変数に保存されますmax
(最初はゼロのように動作します)。
最後に見つかった最大値を印刷します。