shell script 统计文本中字符串的出现的频率及按频率的多少从高到低输出_面试算法题之一
2014-04-16 20:15
302 查看
一个文本文件website里有aa,bb,cc,aa,bbb(每行一个字符串)等 相关的字符串,写出命令来查找出这个文本中都有哪些字符串及各字符串的个数并按个数的多少从多到少依序排序输出
website里的内容:
aa
bb
aa
cc
bb
aa
生成的文件strsorted.txt内容为(即结果)为:
string count
aa 3
bb 2
cc 1
我写的shell脚本如下:
#!/bin/bash
foo()
{
if [ $# -ne 1 ];
then
echo "Usage:$0 filename";
exit -1
fi
grep * website | awk '{ count[$0]++ } END { printf("%s %s\n","website","count"); for(ind in count) { printf("%s %d\n",ind,count[ind]); } }' | sort -nrk 2 >strsorted.txt;
}
foo website
执行后在strsorted.txt中的内容为:
website count
并没有统计出最终正确的结果,原因是 grep * website
写法有误 。
PS;我参考了http://blog.csdn.net/guaguastd/article/details/8332757
使用shell统计出出现次数排名top10的网址,测试执行正确。
其中不明白的地方是:
egrep -o "http://[a-zA-Z0-9.]+\.[a-zA-Z]{2,3}" website
(1) egrep的参数中 -o代表?我网查没有找到 -o
(2) 正则表达式中http://[a-zA-Z0-9.]+\.[a-zA-Z]{2,3} 中[a-zA-Z0-9.]最后还带 有一个点'.'是针对网址中的.吗?
\. 转义字符加上点,我理解应该为eg:http://www.163.com 中的第一个点,但{2,3}是什么意思呢?求解释,谢谢
正确的写法应为:
grep “^[a-zA-Z]*” website | awk '{ count[$0]++ } END { printf("%s %s\n","website","count"); for(ind in count) { printf("%s %d\n",ind,count[ind]); } }' | sort -nrk 2 >strsorted.txt;
其中: grep “^[a-zA-Z]*” website
表示 从website文件中读取以a-z或A-Z开头的所有字符串,并将结果通过管道做为awk命令的标准输入。
耽误相当多的时间,记录以备遇到同样问题的小伙伴们参考
website里的内容:
aa
bb
aa
cc
bb
aa
生成的文件strsorted.txt内容为(即结果)为:
string count
aa 3
bb 2
cc 1
我写的shell脚本如下:
#!/bin/bash
foo()
{
if [ $# -ne 1 ];
then
echo "Usage:$0 filename";
exit -1
fi
grep * website | awk '{ count[$0]++ } END { printf("%s %s\n","website","count"); for(ind in count) { printf("%s %d\n",ind,count[ind]); } }' | sort -nrk 2 >strsorted.txt;
}
foo website
执行后在strsorted.txt中的内容为:
website count
并没有统计出最终正确的结果,原因是 grep * website
写法有误 。
PS;我参考了http://blog.csdn.net/guaguastd/article/details/8332757
使用shell统计出出现次数排名top10的网址,测试执行正确。
其中不明白的地方是:
egrep -o "http://[a-zA-Z0-9.]+\.[a-zA-Z]{2,3}" website
(1) egrep的参数中 -o代表?我网查没有找到 -o
(2) 正则表达式中http://[a-zA-Z0-9.]+\.[a-zA-Z]{2,3} 中[a-zA-Z0-9.]最后还带 有一个点'.'是针对网址中的.吗?
\. 转义字符加上点,我理解应该为eg:http://www.163.com 中的第一个点,但{2,3}是什么意思呢?求解释,谢谢
正确的写法应为:
grep “^[a-zA-Z]*” website | awk '{ count[$0]++ } END { printf("%s %s\n","website","count"); for(ind in count) { printf("%s %d\n",ind,count[ind]); } }' | sort -nrk 2 >strsorted.txt;
其中: grep “^[a-zA-Z]*” website
表示 从website文件中读取以a-z或A-Z开头的所有字符串,并将结果通过管道做为awk命令的标准输入。
耽误相当多的时间,记录以备遇到同样问题的小伙伴们参考
相关文章推荐
- H面试程序(19): 统计出现频率的最高的K的字符串
- 统计一个字符串中出现的最大频率字符;若有频率相同字符,按字典序输出
- python统计文本字符串里单词出现频率的方法
- python统计文本字符串里单词出现频率的方法
- 统计一个大小为30kb~300kb的文本中各单词出现的频率,并输出前十个单词和进行程序性能分析
- 实现一个控制台程序,给定一段英文字符串,统计其中各个英文单词(4字符以上含4字符)的出现频率。
- 输入字符串,统计字符串中出现频率次数最多的字符,并统计次数,以及每个字符字符出现的次数
- go语言之map练习(二):编写一个程序wordfreq程序,统计输入文本中每个单词出现的频率(次数)
- 统计字符串中出现次数最多的字母并输出
- 统计字符串中出现频率最高的字符
- 文本分词,并统计分词出现次数,结果输出到文件中
- Linux作业(三)-shell统计某文章中出现频率最高的N个单词并排序输出出现次数
- 统计字符串”abadcdffbaeba”中每个字符出现了多少次,按次数排序并输出
- java统计文本中某个字符串出现的次数
- 把当前文件中的所有文本拷贝,存入一个txt文件,统计每个字符出现的次数并输出
- Java面试值 从大字符串中汇总统计小字符串出现的次数
- 统计文本中每个单词出现的频率(附C++完整程序)
- Linux作业(三)-shell统计某文章中出现频率最高的N个单词并排序输出出现次数
- Java实现 统计单词出现的次数并按照单词频率从高到低输出
- 写一个程序,用于分析一个字符串中各个单词出现的频率,并将单词和它出现的频率输出显示。(单词之间用空格隔开,如“Hello World My First Unit Test”)