Linux 如何使用bash脚本计算单词中最常见的3个字母序列

Linux 如何使用bash脚本计算单词中最常见的3个字母序列,linux,bash,awk,sed,Linux,Bash,Awk,Sed,Indo Cheap有一个示例文件,如 XYZAcc 反计算 会计师事务所 会计助理 会计公司 声学顾问 他需要得到一个单词中最常见的3个字母序列 输出应该是 acc=5 aco=3 他问这在bash中是否可行 他说:“我完全不知道如何用awk、sed和grep来完成它 任何关于它如何可能的线索…对于bash、sed和awk,这是绝对可能的,下面是如何做到这一点: #!/bin/bash for line in $(cat sample | tr 'A-Z' 'a-z' | tr -s '

Indo Cheap有一个示例文件,如

XYZAcc
反计算
会计师事务所
会计助理
会计公司
声学顾问
他需要得到一个单词中最常见的3个字母序列

输出应该是

acc=5 aco=3
他问这在bash中是否可行

他说:“我完全不知道如何用awk、sed和grep来完成它


任何关于它如何可能的线索…

对于bash、sed和awk,这是绝对可能的,下面是如何做到这一点:

#!/bin/bash

for line in $(cat sample | tr 'A-Z' 'a-z' | tr -s ' ' '\n'); do
  ll=${#line}
  for ((i = 0; i < ll - 2; i++)) ; do   # for each word
    echo ${line:i:3}                    # print all sequences of 3 letters
  done
done | 
  sort |                                # sort the sequences of three letters
  uniq -c |                             # count the sequences
  sed '/^ *1 /d' |                      # filter out the not repeated sequences
  sort -n -r |                          # most frequent sequences first
  awk -F ' ' '{print $2" = "$1}' |      # format output as asked
  tr '\n' ' '                           # put all results on one line 
echo                                    # add a new line at the end

如果需要另一种输出格式,我们可以根据需要轻松调整脚本的代码。

那么为什么不编辑呢?哦,我没看到,这是别人的问题。@KamilCuk,因为OP正在重新提问,以便让他们添加答案。请注意,与其问一个重复的问题,不如对问题进行编辑以修正其不足之处并投票重新开放,这仍然是正确的做法。@Charles Duffy:我编辑了他的问题,但问题没有重新开放。我想知道为什么有些人提出了一个有趣的问题,我想知道我们如何才能防止这种行为。如果你想说社区对什么是和什么不是太广泛的共识应该改变,那么改变的地方就是。@Pierre François,…这需要一段时间--对一个封闭问题的第一次编辑会将其放入重新打开的队列中,供人们投票决定是否重新打开它。这一过程需要时间。(我不赞成重新开放,但这可以在对原始问题的评论中讨论)。我建议使用引号
echo“${line:I:3}”
。例如,我们不需要由
$'\t*\t'
创建的字符来导致
echo
发出当前目录中的文件列表……不过,要以不引起其他问题的方式修复这种情况,您还需要遵循中的建议。
cou = 5 acc = 5 unt = 4 tin = 4 oun = 4 nti = 4 ing = 4 cco = 4 aco = 3