linux bash shell 统计一个文本中 单词 频率的 脚本详解
2013-08-14 14:52
281 查看
#!/bin/bash end=$1 cat $2| tr -cs "[a-z][A-Z]" "\n" | tr A-Z a-z | sort | uniq -c | sort -k1nr -k2 | head -n$end
这段bash脚本接收两个参数,分别是 $1和$2,$1表示显示频率最高的$1个单词(即结果中的前$1行),而$2则表示要分析的文件路径。
接下来就是一系列命令了,这些命令用 | 符号分割开,该符号表示重定向,把上一个命令的结果传递给下一个命令。
cat 命令打开文件
tr 命令:tr是transform的缩写,该命令是著名的流处理命令sed的简化版,也是用来对文档进行转换的。
tr -cs “[a-z][A-Z]" "\n" -c表示取“[a-z][A-Z]"的补集(complement),-s 表示把连续的匹配压缩成一个”\n“,所以整个命令就是把除了字母外的其他字符一律压缩成换行符,如果有连续的匹配,则只转换成一个换行符。
tr A-Z a-z 把大写统一转换成小写。
sort 排序 按字母顺序
uniq 去重 该命令必须对排序好的文档进行,-c 表示打印出字母的重复次数
然后再次 sort ,这次sort比较复杂,因为在uniq命令后 输出结果已经变成了 如下形式:
n word (单词的重复次数+空格+单词)
所以 -k1nr表示对第一列(-k1)的数字形式(-n)的变量进行逆序(-r 从大到小)排列 , -k2表示在前面的排序基础上对重复次数一致的单词进行按字母顺序的排列。
最后是head -n$1,表示只显示结果的前$1行。
如果要显示第5行到第10行,则可以使用sed 命令 把head -n$1 替换成 sed -n '5,10p‘
相关文章推荐
- linux bash shell 统计一个文本中 单词 频率的 脚本详解
- 统计一个大小为30kb~300kb的文本中各单词出现的频率,并输出前十个单词和进行程序性能分析
- 一个简单的程序,统计文本文档中的单词和汉字数,逆序排列(出现频率高的排在最前面)。python实现。
- 『转』统计一个日志文件里,单词出现频率的shell脚本
- 统计一个英文文本的单词出现的频率(有标点符号的)
- 在一个文本文件中的单词统计频率并打印前十个
- go语言之map练习(二):编写一个程序wordfreq程序,统计输入文本中每个单词出现的频率(次数)
- 模拟MapReduce编程的程序案例(用于统计文本中单词出现频率)
- python实现统计文本中单词出现的频率
- 统计英文文本文档中前十个出现频率最多的单词
- Hadoop:使用原生python编写MapReduce来统计文本文件中所有单词出现的频率功能
- 统计文本中出现单词的频率
- 输入一段英文文本,用程序统计出现频率最高和最低的两个单词;
- 基于bf算法统计文本中某个单词出现的频率
- 用JavaIO,正则表达式,HashMap统计一个文本单词数量
- C语言实现的统计一个单词在文章中的频率
- Java编程:统计文本文件中单词出现频率
- 统计英文文本单词出现频率
- 统计一个文档中出现频率最多的k个单词的实现
- 软件工程作业------分析文本文档,统计出现频率最多的十个单词