使用bash将数字剪辑到上限和下限

时间:2014-12-29 11:58:45

标签: bash

我在进行一些计算后提取用户评分。如果计算出的评分超过5.0(比如5.001),我想将其剪辑为5,如果它低于1(比如0.001),我想将其限制为1.

如果有一个bash脚本可以进行此剪辑,我将不胜感激。或者也许我可以使用命令行中的python脚本从bash中获取美元变量。

1 个答案:

答案 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的变量
  • awk的工作方式与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"