【问题标题】:How can I count most occuring sequences of 3 letters within a word with a bash script [duplicate]如何使用 bash 脚本计算一个单词中出现的最多 3 个字母的序列 [重复]
【发布时间】:2020-01-13 21:43:39
【问题描述】:

Indo Cheap 有一个示例文件,例如

XYZAcc
ABCAccounting
Accounting firm
Accounting Aco
Accounting Acompany
Acoustical consultant

他需要得到一个单词中出现次数最多的 3 个字母序列。

输出应该是

acc = 5 aco = 3

他问这在 bash 中是否可行。

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

任何线索如何可能......“

【问题讨论】:

  • 那你为什么不编辑your last post?哦,我没看到,这是别人的问题。
  • @KamilCuk,因为它是someone else's question OP 正在重新询问,以便让他们添加答案。请注意,编辑问题以修复其缺陷并投票重新开放仍然是正确的做法,而不是提出重复的问题。
  • @Charles Duffy:我编辑了他的问题,但问题没有重新打开。我想知道为什么有些人会关闭一个有趣的问题,我想知道我们如何防止这种行为。
  • 如果您想争论社区关于什么是太宽泛和不是太宽泛的共识应该改变,这样做的地方是Meta Stack Overflow。
  • @PierreFrançois, ...这需要一段时间 - 对已关闭问题的第一次编辑会将其放入重新打开队列,供人们投票决定是否重新打开它。这个过程需要时间。 (我不赞成重新开放,但这可以在原始问题的 cmets 中讨论)。

标签: linux bash awk sed


【解决方案1】:

使用 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

上面示例的输出是:

cou = 5 acc = 5 unt = 4 tin = 4 oun = 4 nti = 4 ing = 4 cco = 4 aco = 3

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

【讨论】:

  • 我建议echo "${line:i:3}" 加上引号。例如,我们不需要$'\t*\t' 创建的字符来使echo 发出当前目录中的文件列表。
  • ...虽然确实如此,但要以不会导致其他问题的方式解决此问题,您还需要遵循 DontReadLinesWithFor 中的建议。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-13
  • 2015-11-18
  • 2013-12-10
  • 2015-10-09
  • 2020-07-05
  • 2022-12-11
  • 1970-01-01
相关资源
最近更新 更多