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
我正在通过 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