bash - 计算字符串在随机生成器中出现的次数
问题描述
我有一个带有字符串数组的while循环和一个简单的随机化它们。
然而,我的问题是计算循环运行时相同字符串出现的次数。
例如:
oc/open 字符串出现了 3 次
rw/read 字符串出现了 2 次
oc/close 字符串出现了 3 次
ETC....
目前我在循环中使用 if else 方法,但必须有更好的方法来计算它们?有小费吗?
function injection {
COUNTER=0
countopen=0
while [ $COUNTER -lt 10 ]; do
module[0]="oc/open"
module[1]="oc/close"
module[2]="rw/read"
module[3]="rw/write"
randModule=$[$RANDOM % ${#module[@]}]
export MODULE=${module[$randModule]}
echo $MODULE
if [ $randModule == 0 ]; then
let countopen++
#let countclose++
#etc
#etc
fi
let COUNTER++
done
echo "Open $countopen"
}
injection
解决方案
如果您可以使用外部命令,请使用sort
anduniq
来计算出现次数:
#!/bin/bash
module=( oc/open oc/close rw/read rw/write )
for i in {1..100} ; do
echo ${module[RANDOM % ${#module[@]}]}
done | sort | uniq -c
您也可以自己在关联数组中计算它们:
#!/bin/bash
module=( oc/open oc/close rw/read rw/write )
declare -A count
for i in {1..100} ; do
mod=${module[RANDOM % ${#module[@]}]}
(( ++count[$mod] ))
done
for m in "${module[@]}" ; do
printf '%s %d\n' "$m" "${count[$m]}"
done
推荐阅读
- elasticsearch - 尝试为 Elasticsearch Sink 配置 Debezium 映像
- blockchain - 哪个区块链最适合实施防篡改文件?
- django - 有没有办法在没有用户身份验证的情况下检查 Django 服务器中的客户端?
- typescript - 定义我想作为输入的函数类型:Typescript
- c - 如何在没有头文件的情况下调用像 time() 这样的 C 函数?
- java - 如何显示我的数组列表中的元素?
- flutter - Flutter web 在同一个项目但不同的笔记本电脑上抛出错误
- react-native - 多个 json 数据在 react native 的相同返回函数中使用
- audio - 使用ffmpeg延迟合并两个音频
- angular - Angular 如何对集合级别的更改进行自动更改检测?