0

我已经浏览和搜索了很长一段时间,并且尝试了几种方法,但我似乎做错了什么。

我正在从 /sys/bus/devices/w1/... 读取,其中的输出如下所示:

46 01 4b 46 7f ff 0a 10 85 : crc=85 YES
46 01 4b 46 7f ff 0a 10 85 t=20375

我只对“20375”感兴趣(如果有人关心,它等于 20.375°C)

我用过:

cat /sys/bus/w1/devices/28-00000465f413/w1_slave | tr "t=" "\n"

...获得该值,但我无法将其放入单独的变量中...

T1FILE=$(cat /sys/bus/w1/devices/28-00000465f413/w1_slave | tr "t=" "\n")
T2FILE=$(cat /sys/bus/w1/devices/28-0000046612e5/w1_slave | tr "t=" "\n")

我怎样才能做到这一点?

谢谢您的帮助!我正在使用 awk 变体!

T1=$(awk -F'=' '/ t=/ {print $NF }' /sys/bus/w1/devices/28-00000465f413/w1_slave)
T2=$(awk -F'=' '/ t=/ {print $NF }' /sys/bus/w1/devices/28-0000046612e5/w1_slave)
4

3 回答 3

1

使用,指定=为字段分隔符 ( -F),对于包含字符串 " t=" 的每一行,该行print上的最后一个字段 ( $NF),/sys/bus/w1/devices/28-00000465f413/w1_slave用作输入:

awk -F'=' '/ t=/ { print $NF }' /sys/bus/w1/devices/28-00000465f413/w1_slave 

把它们放在一起:

T1FILE=$(awk -F'=' '/ t=/ { print $NF }' /sys/bus/w1/devices/28-00000465f413/w1_slave)
于 2013-03-18T11:26:10.027 回答
1

试试grep:

grep -Po "(?<=t=)\d+" file

测试:

kent$  echo "46 01 4b 46 7f ff 0a 10 85 : crc=85 YES
46 01 4b 46 7f ff 0a 10 85 t=20375"|grep -Po "(?<=t=)\d+"
20375
于 2013-03-18T11:27:54.330 回答
1

使用 awk,不需要t=在行尾。

awk '{FS="t="} /t=/ { split($2, t," "); print t[1] }' /sys/bus/w1/devices/28-00000465f413/w1_slave 
于 2013-03-18T11:31:54.600 回答