Bash:识别数组中的重复字符串

时间:2013-03-19 00:04:24

标签: bash

我有一个脚本在开始视频编码之前检测裁剪值。 我会以一定的间隔进行多次探测,比如说每100帧一次。 如果所有探测帧的所有裁剪值都匹配,那么就没有问题,并且脚本会在编码函数中启动。如果裁剪值不同,则脚本会退出并出现错误,我需要手动选择正确的裁剪值,这很烦人。

因此,我宁愿选择“最佳”可能值,而不是退出脚本,而在这种情况下,该值是重复次数最多的数字。

那么如何从最重复的集合中挑选一个字符串呢?

说,我把所有裁剪值都放在一个数组中。 裁剪=('3''4''3''5''7''3''7'); 所以在这种情况下,我会选择值'3',因为它经常重复。 如何在Bash中以编程方式执行此操作?

感谢。

- 编辑 -

我道歉,为了简化我的问题,我可能会让你们有些困惑。 实际裁剪值看起来像“720:568:0:4”。

1 个答案:

答案 0 :(得分:2)

使用关联数组的纯bash解决方案(需要bash版本4):

#! /bin/bash
crop=(3 4 3 5 7 3 7)
declare -A count
max=0
for c in "${crop[@]}" ; do
    (( count[$c]++ ))
    if (( count[$c] > max )) ; then
        max=${count[$c]}
        idx=$c
    fi
done
echo $idx