gpt4 book ai didi

linux - 基本 bash 脚本 awk 和除法

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:10:10 25 4
gpt4 key购买 nike

首先对这个基本问题感到抱歉。但我不是程序员,需要一些帮助。

我有一个命令可以给我传感器的温度。

例子:

root@machine:~ $ snmpwalk 172.69.4.25 -v 2c -c rocommunity .1.3.6.1.3.1.1.4
iso.3.6.1.3.1.1.4.1.2.5.116.101.109.112.49.1 = STRING: "31625"

还有一个小的基本 bashscript,它只给我字符串的值。

#!/bin/bash
SLAVE="/sys/devices/w1_bus_master1/28-80000007e290/w1_slave"
OUTPUT=$(/bin/cat $SLAVE | /usr/bin/awk -F 't=' ' { printf $2 } ')
echo $OUTPUT

w1_slave文件如下

25 01 55 00 7f ff 0c 0c 08 : crc=08 YES
25 01 55 00 7f ff 0c 0c 08 t=31625

但它是一个温度,我需要一个/1000 分度的值。 31625 实际是 31.625 度。

如果我把

#!/bin/bash
SLAVE="/sys/devices/w1_bus_master1/28-80000007e290/w1_slave"
OUTPUT=$(/bin/cat $SLAVE | /usr/bin/awk -F 't=' ' { printf $2 / 1000 } ')
echo $OUTPUT

给我

root@machine:~ $ /opt/scripts/gettemp.sh
031.625

031.625 是结果,但我不知道为什么不只放 31.625 并删除第一个 0,

我做错了什么吗?有人可以帮助我吗?

谢谢最好的问候

最佳答案

问题是您正在打印 $2将两行的值除以 1000 并使用 printf 这样做而不终止 \n .

所以从你的第一个输入行开始,那里没有 t=分隔符 $2 的值是 NULL 字符串,当您除以 1000 时,结果为数字输出 0 但后面没有换行符,因为您错误地使用了 printf。

从你的第二行你得到输出 31.625 但它被添加到与 0 相同的行的末尾制作于。

a) 永远不要做 printf $2 (或任何其他包含输入数据的字段),总是 printf "%s", $2相反 - 想象一下 $2 时的区别包含 printf 格式化字符,如 %s .

b) 除非您需要格式化,否则请使用 print而不是 printf .

c) 如果你想用 printf 换行,那么将它们包含在格式字符串中

d) 如果您只想从匹配某些模式的输入行输出,则编写代码来执行该测试。

这可能是您真正想要的:

awk -F 't=' 'NF>1{print $2 / 1000}'

我仍然不知道初始 snmpwalk 代码片段在问题中的作用是什么,以及你的 shell 脚本的其余部分 - 不要对未导出的变量名使用全部大写,并且避免使用 UUOC 并引用你的变量:

#!/bin/bash
slave="/sys/devices/w1_bus_master1/28-80000007e290/w1_slave"
output=$(awk -F 't=' 'NF>1{print $2 / 1000}' "$slave")
echo "$output"

关于linux - 基本 bash 脚本 awk 和除法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38505218/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com