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

t=awk を使用すると、行末に必要ありません。

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