如何统计一个词的频率>20

如何统计一个词的频率>20

仅使用 AWK,我需要仅在超过 20 个字符时计算单词的出现次数。我已经找到了计算单词频率的方法,但是在设置这个参数时遇到了一些问题。

接下来,我想将这些单词与我要定义的同义词分开,但跳过一个单词。

我的意思是:如果“hello”出现了 30 次,我想将2nd, 4th,6th等等替换为“hi”,而不是1st, 3rd, ... 仍然是“hello”。

这就是我所做的:

BEGIN { FS="[^a-zA-Z]+" } {
     for (i=1; i<=NF; i++) {
         word = tolower($i)
         words[word]++
     }
 }
 END {
     for (w in words)
          printf("%3d %s\n", words[w], w)
 } 

答案1

你的意思是:

BEGIN { flag=0; FS="[^a-zA-Z]+" } {
     for (i=1; i<=NF; i++) {
         word = tolower($i)
         if ($0 ~ /hello/ ) {
             if (flag) {
                 sub ("hello", "hi", word );
             }
            flag= !flag
         }
         words[word]++
     }
 }
END {
        for (w in words)
           printf("%3d %s\n", words[w], w)
    }

上面的作用是在程序初始化时设置 a flagto 。0awk

在文件的迭代中,它检查hello输入字符串,如果hello找到,则检查flag.如果flag0,则不要更改hellohi

flag然后切换(0 => 1, 1 => 0)的值。

下次hello出现时,该flag值为,并且将进行to1的替换。hellohi

相关内容