awk大于小于但在设定范围内

时间:2013-10-22 11:02:14

标签: bash if-statement awk

我有一个脚本,基本上可以评估2个十进制数字。

if (( $(echo "$p $q" | awk '{ print ($1 < $2)}') )); then
   echo "Evaluation: Acceptable!"

q是用户输入的小数或数字 p是计算出的数字。

因此,如果p = 1,q = 2,那么结果是可接受的。

问题#1
如果计算出的p为-150,而q = 2,我们如何将其评估为不可接受。基本上,如果p小于0或负值,结果应该是不可接受的。

问题#2
q是一个范围:-q&lt; 0&lt; q
示例:用户输入q = 0.01
可接受范围:-0.01至0.01
如果p在这个范围内,那么它是可接受的,否则是不可接受的。

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

我认为这个awk应该足够你了:

awk '{print ($1 > 0 && $1 < $2)}'

关于您的要求#2:

因为根据要求#1,任何p都不能为负,所以只需检查$1 < $2即可。

答案 1 :(得分:2)

目前尚不清楚您的2个问题是否属于额外限制,是否会添加到“if(p&lt; q)”条件中,或者它们是否分开。我将向您展示三个单独的awk调用;如果您需要合并,请告诉我们。在大多数情况下,您只需在if条件中添加&&分隔的条件即可。设置变量p和q而不是使用$ 1和$ 2对我来说似乎更清楚,但如果你只是写一行,那就无所谓了。

echo $p $q | awk '{ p=$1; q=$2; if (p < q) print "acceptable"; }'
echo $p $q | awk '{ p=$1; q=$2; if (p < 150) print "UNacceptable"; }'
echo $p $q | awk '{ p=$1; q=$2; if (p >= -q && p <= q) print "acceptable"; else print "UNacceptable"; }'