查找给定单词中出现最多的字母

查找给定单词中出现最多的字母
Input = 'RaamKuumabbbb'
Output = b

b 在字符串 A='RaamKuumabbbb' 中出现了四次

答案1

尝试这个

 Input='RaamKuumabbbb'
 output=(`echo $Input | grep -o . | sort | uniq -c | sort -nr | head -n1`)

 echo ${output[1]} appeared ${output[0]} times in the string $Input

答案2

使用 Perl:

$ echo 'RaamKuumabbbb' | perl -pe 'map{$c{$_}++}split(//,$_);$_=[sort{$c{$b}<=>$c{$a}}keys(%c)]->[0]'
b

(输出末尾没有换行符)

它使用 Perl 来计算给定字符串中每个字符的出现次数,然后按出现次数降序对生成的哈希进行排序,提取最常见的字符。

经过一番整理后的 Perl 脚本:

# split string ($_) into individual characters
# count the number of occurrences of each in the hash %c
map { $c{$_}++ } split( //, $_ );

# sort the keys of %c (the characters) by 
# decreasing number of occurrences (the values)
# and pick out the first key
$_ = [ sort { $c{$b} <=> $c{$a} } keys(%c) ]->[0];

该选项将提示 Perl在执行代码后-p输出任何内容。$_

要获取每个字符的计数:

$ echo 'RaamKuumabbbb' | perl -pe 'chomp;map{$c{$_}++}split(//,$_);$_=join "\n",map{"$c{$_}:$_"}sort{$c{$b}<=>$c{$a}}keys(%c)'
4:b
3:a
2:m
2:u
1:R
1:K

答案3

如果您的单词在文件中,例如 text.txt 那么您可以使用

  sed 's/\(.\)/\1\n/g' text.txt | sort| uniq -c | sort -nr  |  head -n 1

它将在每个字符之间添加新行,然后删除重复项,并按降序对它们进行排序,并为您提供第一个条目,即最大出现次数。

或者您可以使用:

echo "RaamKuumabbbb" | sed -E 's/(.)/\1\n/g' | sort |  uniq -c | sort -nr  |  head -n 1

上面两个命令都会将输出作为4 b,如果您只想b作为输出,则将管道输出添加到awk '{ print $2 }'ie:

echo "RaamKuumabbbb" | sed -E 's/(.)/\1\n/g' | sort|  uniq -c | sort -nr  |  head -n 1 | awk '{ print $2 }'

答案4

echo  RaamKuumabbbb  |
perl -lpe '
  $h{$_}++ for /./g;
  ($_) = reverse map { $h{$_} > $m and ($m,$i)=($h{$_},$_);$i } keys %h;
'

或者,我们可以对 的值使用反向数字排序%h并获取 中的最高值$_

perl -lpe '
  $h{$_}++ for /./g;
  ($_) = sort { $h{$b} <=> $h{$a} } keys %h;
'

在职的 :

  • 首先填充一个哈希 %h,其键是输入字符串中的各个字符,通过正则表达式获得,/./g值是输入字符串中字符出现的次数。
  • 然后我们迭代哈希的键,它们是字符串中的各个唯一字符。在每次迭代中,我们尝试找到计数的最大值并记录它的字符。
  • 最后一个字符存储在 $_ 中,然后隐式地带到stdout

相关内容