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

BASH Script - Check if consecutive numbers in a string are above a value

我正在通过 bash 脚本回显来自 Oracle 数据库集群的一些数据。目前,我从 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”以上,我只希望逻辑 return 为真。

例如,如果输出是:

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

逻辑应该returnfalse/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

然后会returntrue/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
          }
       }
     }'

会做的。 ($? 如果你有足够多的数字超过你的阈值,将为 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