加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – 文本文件中最常出现哪个单词?

发布时间:2020-12-16 01:49:43 所属栏目:安全 来源:网络整理
导读:有一个txt文件,每行都有一个单词. "word1""word1""word2""word2""word1" 我想知道哪个词出现最多,但我不知道如何获得,任何想法? 解决方法 注意:有关不区分大小写的解决方案,请参阅底部. sort,uniq,head和cut调用的组合在概念上是最简单的,也是可扩展的,但
有一个txt文件,每行都有一个单词.

"word1"
"word1"
"word2"
"word2"
"word1"

我想知道哪个词出现最多,但我不知道如何获得,任何想法?

解决方法

注意:有关不区分大小写的解决方案,请参阅底部.

sort,uniq,head和cut调用的组合在概念上是最简单的,也是可扩展的,但是这里的单通awk解决方案可能更高效,虽然更复杂,并且仅限于找到“胜利者”并且具有不可预测性在发生关系时订购:

awk '{ if (++words[$0] > max) { max = words[$0]; maxW=$0 } } END { print maxW }' file

使用示例输入,返回“word2”(包括双引号).
使用print max,maxW也可以输出计数.

如果出现平局,则在共享最大值的单词中. count,它是最后一次出现在输入文件中的第一个“wins”(输出)的那个.

这是多实用程序等价物,它允许将解决方案扩展到前N个单词,并且在出现平局时还可以在获胜者之间提供可预测的顺序:

$sort file | uniq -c | sort -k1,1nr -k2b | head -n 1 | cut -d" -f2
word2

如果出现平局,则按字母顺序排列的第一个单词是共享最大值的单词.计数打印.

注意:为方便起见,上面使用cut来提取单词而不包含双引号.

要保留双引号,请使用awk而不是cut:

$sort file | uniq -c | sort -k1,1nr -k2b | head -n 1 | awk '{print $NF}'
"word2"

省略最后一个管道段并修改头部的-n 1选项,可以查看每个单词的出现次数,并查找前N个单词(包括双引号);例如,要查看前10名(使用示例输入,您只能得到2):

$sort file | uniq -c | sort -k1,1nr -k2b | head -n 10
   3 "word1"
   2 "word2"

关于排序调用的注释,排序-k1,1nr -k2b:

明确说明排序字段是一种很好的做法 – 既提高效率又避免意外结果:

> -k1,1nr主要按第一个空格分隔的字段(k1,1),数字(-n),以相反的顺序(r)排序.

>注意-k1,1中的显式结束索引,因为只有-k1会对从字段1到行尾的所有内容进行排序.

> -k2b然后从第二个空格分隔的字段开始到行的末尾(-k2),忽略前导空格(b;分隔字段的空格)和执行词法(字母)排序.

不幸的是,较新版本的GNU排序(不是macOS上的那个)有一个有用的–debug选项,可以看到每行在排序过程中如何分解成键.

使用排序或排序-nr对整行进行排序很有吸引力,但不一定会产生预期的结果:

>只需按字母顺序(按字母顺序)对整行进行排序,按升序排序;由于第一个字段中字数的填充固定宽度特性,结果仍然有效地进行数字排序,但是如果出现平局,则输出的是字母顺序的最后一个字.
>只需排序-rn按降序对整行应用数字排序.使用数字排序字段解析停止在可以解释为数字的最长前缀时,称为最后比较的隐式功能(可以使用-n关闭)按字母顺序对行的其余部分进行排序(在这种情况下,顺序相反) ).因此,它也是字母顺序的最后一个单词,在出现平局时输出.

不区分大小写的变体:

请注意,为简单起见,输入将转换为全小写.

> awk

awk '{ $0=tolower($0); if (++wds[$0] > max) { max = wds[$0]; maxW=$0 } } END { print maxW }' file

>排序uniq头部切割

tr '[:upper:]' '[:lower:]' < file |
  sort | uniq -c | sort -k1,1nr -k2b | head -n 1 | cut -d" -f2

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读