找到一对出现次数最多的单词

找到一对出现次数最多的单词

我有 10 个文本文件,每个文件中都有一本书的一章,我想找到在一行中最常出现的一对单词,即:

第1章:

hello world good boy green sun

good green boy sun world hello

第2章:

第3章:

.....ETC

第一章所需的输出:

hello world (alphabet order)

答案1

awk '
  {
    $0 = tolower($0)
    for (i = 1; i < NF; i++) {
      pair = $i"" < $(i+1) ? $i" "$(i+1) : $(i+1)" "$i
      c = ++count[pair]
      if (c > max) max = c
    }
  }
  END {
    for (pair in count)
      if (count[pair] == max)
        print pair
  }'

答案2

尝试这个,

  1. 用于awk打印每对单词。
  2. 用于perl对单词对中的单词进行排序 (通过)。
  3. 使用sortuniq -c来计算每对出现的次数。

awk '{for (i=1;i<NF;i++) { print tolower($i)" "tolower($(i+1)) }}' file \
| perl -ane '$,=" "; print sort @F; print "\n";' \
| sort | uniq -c | sort -b -k1nr -k2

输出:

  2 boy green
  2 hello world
  1 boy good
  1 boy sun
  1 good green
  1 good world
  1 green sun
  1 sun world

相关内容