比较shell脚本中两个混合了特殊表达式的字母数字变量



我想比较两个字母数字字符串,下面是我认为应该完成这项工作的bash表达式。但是结果是空白的。请建议。

:~$ echo $tempnow $threshold
+60.0°C +80.0°C
:~$ res=`echo "$tempnow $threshold" | awk '{ if($1 > $2) print "Exceeds"; else echo "Normal" }'`
:~$ echo $res
:~$

awk中没有echo

你可以使用:

echo '+90.0°C +80.0°C' | awk '{ print ($1+0 > $2+0 ? "Exceeds" : "Normal") }'
Exceeds
echo '+60.0°C +80.0°C' | awk '{ print ($1+0 > $2+0 ? "Exceeds" : "Normal") }'
Normal

还要注意使用+0将字段转换为数值

您在awk脚本中编写了echo而不是print

这将被解释为一个不存在的函数或变量的名称,然后它将被强制转换为一个空字符串,并与字符串"Normal"连接。结果将被丢弃。

我建议你这样写:

res=$(awk '{ print ($1 > $2 ? "Exceeds" : "Normal") }' <<<"$tempnow $threshold")

使用<<<将字符串通过标准输入传递给awk。将三元运算符的结果打印出来并存储在变量$res中。

请记住,您当前正在比较字符串,因此您将在以下情况下遇到问题:

$ tempnow=+9.0°C
$ threshold=+80.0°C
$ awk '{ print ($1 > $2 ? "Exceeds" : "Normal") }' <<<"$tempnow $threshold"
Exceeds

try below:-

res=`echo "$tempnow $threshold" | awk '{ if($1 > $2) print "Exceeds"; else print "Normal" }'`

最新更新