我有一个看起来丑陋的命令,从传感器获取输出并将其除去不需要的字符和小数位,然后用带有尾随华氏符号的awk打印它。该命令如下所示:
sensors -f | awk '/temp1/ { print $2 }' | sed 's/+//g' | awk '{ sub (/\..*/, ""); print $1 "°F" }'
此命令的输出如下所示。
101°F
命令有点乱,但它完成了工作,并考虑到我对awk和sed的有限知识,这是可以说的。我希望有更多知识的人可以告诉我这个命令如何被压缩,因为我不清楚如何运行带有搜索模式的awk,然后是替换和打印。任何帮助,将不胜感激。谢谢!
编辑:按要求输出传感器-f。
acpitz-virtual-0
Adapter: Virtual device
temp1: +112.2°F (crit = +203.0°F)
temp2: +118.6°F (crit = +221.0°F)
coretemp-isa-0000
Adapter: ISA adapter
Core 0: +119.0°F (high = +212.0°F, crit = +212.0°F)
Core 1: +121.0°F (high = +212.0°F, crit = +212.0°F)
答案 0 :(得分:4)
# Posix
sensors -f | sed -e '/^temp1:[[:blank:]]\{1,\}[+]/ !d' -e 's///;s/F.*/F/'
# GNU
sensors -f | sed '/^temp1:[[:blank:]]+[+]/!d;s///;s/F.*/F/'
另一种sed方法
答案 1 :(得分:3)
您可以使用此单个awk命令:
sensors -f | awk '/temp1/ { gsub(/^\+|\.[[:digit:]]+/, "", $2); print $2 }'
<强>输出:强>
112°F
gsub(/^\+|\.[[:digit:]]+/, "", $2);
将替换报告温度中的任何前导+
或十进制值。
答案 2 :(得分:3)
使用GNU sed:
sensors -f | sed -nE 's/^temp1: +\+([^.]+).[0-9]*(°F).*/\1\2/p'
输出:
112°F
答案 3 :(得分:2)
这不那么混乱了:
sensors -f | awk '/temp1/{ printf "%d°F\n", $2 }'
它有效,因为awk在开始时开始解析字符串$ 2,如果它不再符合要求则停止。因此,作为示例,"+234.76abcd" * 1
被解析为数字234.76。当它寻找一个整数来填充格式字符串中的%d时,会发生同样的事情。
我更喜欢:
sensors -f | awk '/temp1/{ print int($2) "°F" }'