String BASH脚本-检查字符串中的连续数字是否高于某个值

String BASH脚本-检查字符串中的连续数字是否高于某个值,string,bash,numbers,evaluate,String,Bash,Numbers,Evaluate,我通过bash脚本从oracledb集群回显一些数据。目前,我从SQLPlus输出到脚本中的变量是: 11/12 0 0 0 0 0 0 1 0 1 0 5 4 1 0 0 0 0 0 0 0 0 0 0 0 我想做的是计算这个数字串,不包括第一个(日期),看看是否有连续的6个数字超过某个值,比如说10 我只希望在所有6个连续值都高于“10”时逻辑返回true 例如,如果输出为: 11/12 0 0 8 10 5 1 1 0 8 10 25 40 6 2 0 0 0 0 0 0 0 0 0 0

我通过bash脚本从oracledb集群回显一些数据。目前,我从SQLPlus输出到脚本中的变量是:

11/12 0 0 0 0 0 0 1 0 1 0 5 4 1 0 0 0 0 0 0 0 0 0 0 0
我想做的是计算这个数字串,不包括第一个(日期),看看是否有连续的6个数字超过某个值,比如说10

我只希望在所有6个连续值都高于“10”时逻辑返回true

例如,如果输出为:

11/12 0 0 8 10 5 1 1 0 8 10 25 40 6 2 0 0 0 0 0 0 0 0 0 0
逻辑应该返回false/null/zero,这是我可以消极处理的任何内容

但是如果字符串看起来像这样:

11/12 0 0 0 0 5 9 1 0 1 10 28 10 12 19 15 11 6 7 0 0 0 0
然后它将返回true/1等


是否有任何bash组件可供我使用?我在这方面已经有一段时间了。

那么说你的字符串是用$S表示的

echo $S | awk '
    { L=0; threshold = 10; reqLength = 6;
      for (i = 2; i <= NF; ++i) {
          if ($i >= threshold) {
              L += 1
              if (L >= reqLength) {
                  exit(1);
              }
          } else {
              L = 0
          }
       }
     }'
echo$S|awk'
{L=0;阈值=10;请求长度=6;
对于(i=2;i=阈值){
L+=1
如果(L>=reqLength){
出口(1);
}
}否则{
L=0
}
}
}'

我会的。(如果您有足够多的数字超过阈值,$将为1)

对于多样性,这里有一个不依赖于
awk
的解决方案:

#!/usr/bin/env bash

contains() {
   local nums=$* count=0 threshold=10 limit=6 i
   for i in ${nums#* }; do
      if (( i >= threshold )); then
         (( ++count >= limit )) && return 0
      else
         count=0
      fi
   done
   return 1
}

output="11/12 0 0 0 0 5 9 1 0 1 10 28 10 12 19 15 11 6 7 0 0 0 0"
if contains "$output"; then
   echo "Yaaay!"
else
   echo "Noooo!"
fi

这可能会有帮助。它应该是:
i=regLength
。很好。您不必为每一行定义阈值和reqLength。我会像这样传递这些值:
awk-v threshold=10-v reqLength=6'{L=0;for…
@PesaThe谢谢!特别是
i@glennjackman,OP只显示了一行作为输入。如果我必须处理多行,我会在BEGIN规则中定义常量。当然,按照你的建议在命令行中传递它们也可以。我喜欢这个,+1。我肯定应该学习更多bash:-)这个在我的头脑中更有意义(用我有限的bash知识)+1,并标记答案。谢谢。