我想比较两个字母数字字符串,下面是我认为应该完成这项工作的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" }'`