首页 > 解决方案 > 计算字符串在随机生成器中出现的次数

问题描述

我有一个带有字符串数组的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

标签: bash

解决方案


如果您可以使用外部命令,请使用sortanduniq来计算出现次数:

#!/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

推荐阅读