String BASH脚本-检查字符串中的连续数字是否高于某个值
我通过bash脚本从oracledb集群回显一些数据。目前,我从SQLPlus输出到脚本中的变量是: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
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,并标记答案。谢谢。