0 shell-script text-processing regular-expression
我想从命令的输出中提取最大温度值,我将其存储在 shell 变量中,如下所示:
res="$(get temperature all)"
Run Code Online (Sandbox Code Playgroud)
结果看起来像
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
Run Code Online (Sandbox Code Playgroud)
我想提取包含在字符串Temperature:
和之间的数值C
,并从所有设备记录中找到最大值。对于上述情况,输出应为
33.5
Run Code Online (Sandbox Code Playgroud)
因为温度值为 33.5, 32.6, 33.1, 33.1
在上面的命令中,输出给出
Device 0
信息,Device 0
,Device 1
信息Device 0
, Device 1
, Device 3
,Device 4
信息因此,无论设备数量如何,查找最高温度逻辑都应该是通用的(尽管最大数量为 4,但可用设备的最小数量为 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'
Run Code Online (Sandbox Code Playgroud)
假设每个设备只能包含一个“温度”读数,并且您只对打印最大值(而不是关联的设备编号)感兴趣,您可以尝试以下操作:
awk '$1=="Temperature:" {if ($2>max) max=$2} END{printf("Maximum: %.1f\n",max)}'
Run Code Online (Sandbox Code Playgroud)
这将解析第一个以空格分隔的字段 ( $1
)所在的所有行Temperature:
,并检查第二个字段 ( $2
,这是数字温度值)。如果它大于目前的最大值,则将其存储在变量中max
(其行为就像最初为 0 一样)。
最后,打印找到的最大值。
归档时间: |
|
查看次数: |
95 次 |
最近记录: |