我在进行一些计算后提取用户评分。如果计算出的评分超过5.0(比如5.001),我想将其剪辑为5,如果它低于1(比如0.001),我想将其限制为1.
如果有一个bash脚本可以进行此剪辑,我将不胜感激。或者也许我可以使用命令行中的python脚本从bash中获取美元变量。
答案 0 :(得分:2)
您可以使用awk:
awk '$0<1{$0=1}$0>5{$0=5}1' <<<"$var"
如果变量小于1,则将其更改为1.如果变量大于5,则将其更改为5. 1
最后始终为true,因此awk执行默认操作,即打印记录。
一些额外的解释:
<<<
是另一种撰写echo "$var" | awk ...
的方式,由bash支持$0
指的是当前的“记录”,在这种情况下是已经回显给bash的变量condition { action }
类似,因此每个块只有在前面的条件为真时才会运行{action}
部分,则默认操作为{print}
,这就是最后的1
。例如:
$ var=0.001
$ awk '$0<1{$0=1}$0>5{$0=5}1' <<<"$var"
1
$ var=5.001
$ awk '$0<1{$0=1}$0>5{$0=5}1' <<<"$var"
5
要覆盖变量,可以使用命令替换:
var=$(awk '$0<1{$0=1}$0>5{$0=5}1' <<<"$var")
如果你想让自己感到困惑,你可以使用两个三元运算符来做同样的事情:
awk '{$0=$0<1?1:$0>5?5:$0}1' <<<"$var"