最近在看shell中有个题目为统计单词的个数,使用了awk功能,代码如下
#!/bin/bash
if [ $# -ne ];then
echo "Usage:basename $0 filename"
exit
fi
filename=$
egrep -o "[a-zA-Z]+" $filename |
awk '{count[$0]++}
END{printf "%-14s %s\n","Word","Count"
for(i in count)printf "%-14s %s\n",i,count[i]|"sort -nrk 2"}'
使用正则来匹配,+表示1个多个
结果如下:
[root@localhost shellcookbook]# sh word_freq.sh item.txt
Word Count
Tennis
Sports
Racket
Printer
Office
Laser
Video
Refrigerator
Player
MP
HD
Camcorder
Audio
Appliance
正好在学习python,顺便拿python实现一下吧,代码如下:
#!/usr/bin/env python
import sys,re
if len(sys.argv[0:]) != 2:
print "Usage:%s file" % sys.argv[0]
sys.exit(0)
try:
filename=sys.argv[1]
with open(filename) as f:
data=f.read()
except IOError:
print "Please check %s is Exised!" % filename
exit(0)
except Exception,e:
print e
sys.exit()
patten=r'[a-zA-Z]+'
words=re.findall(patten,data)
#print sorted([(i,words.count(i)) for i in set(words)],cmp=lambda x,y:cmp(x[1],y[1]),reverse=True)
wordcounts=sorted([(i,words.count(i)) for i in set(words)],key=lambda x:x[1],reverse=True)
print "%-14s %s" % ("Word","Counts")
for word,counts in wordcounts:
print "%-14s %s" % (word,counts)
使用的也是正则先匹配出来后,再用sorted进行排序并计算出来个数,结果如下:
[root@localhost shellcookbook]# python word_freq_py.py item.txt
Word Counts
Printer 2
Laser 2
Office 2
Tennis 2
Sports 2
Racket 2
Appliance 1
Player 1
Video 1
HD 1
Audio 1
Camcorder 1
Refrigerator 1
MP 1
我们来看看这二个对比,程序效率如何:
# time sh word_freq.sh item.txt
real 0m0.007s
user 0m0.003s
sys 0m0.005s
time python word_freq_py.py item.txt
real 0m0.035s
user 0m0.031s
sys 0m0.004s
对比来看,shell程序更快,主要是使用了awk提高了效率。所以在linux下写的小程序时,shell能实现,还是使用shell实现,python辅助。
使用tuple统计文件中单词的个数
name = input("Enter file:") if len(name) < 1 : name = "input.txt" fhand = ope ...
学c语言做练习之​统计文件中字符的个数
统计文件中字符的个数(采用命令行参数) #include #include int main(int argc, char *argv[] ...
JAVA实验--统计文章中单词的个数并排序
分析: 1)要统计单词的个数,就自己的对文章中单词出现的判断的理解来说是:当出现一个非字母的字符的时候,对前面的一部分字符串归结为单词 2)对于最后要判断字母出现的个数这个问题,我认为应该是要用到ma ...
C语言算法--统计字符串中单词的个数
#include #include #include int main(void) { int le ...
Python 统计文本中单词的个数
1.读文件,通过正则匹配 def statisticWord(): line_number = 0 words_dict = {} with open (r'D:\test\test.txt',enc ...
Linux统计文件中单词出现的次数
grep -E "\b[[:alpha:]]+\b" /etc/fstab -o | sort | uniq -c 或 awk '{for(i=1;i
Scala快速统计文件中特定单词,字符的个数
val fileContent=Source.fromFile("/home/soyo/桌面/ss5.txt").getLines.mkString(",") ...
sort +awk+uniq 统计文件中出现次数最多的前10个单词
实例cat logt.log|sort -s -t '-' -k1n |awk '{print $1;}'|uniq -c|sort -k1nr|head -100 统计文件中出现次数最多的前10个单 ...
java统计文本中单词出现的个数
package com.java_Test; import java.io.File; import java.util.HashMap; import java.util.Iterator; imp ...
随机推荐
Windows台的FailOver群集简介
首先,您需要有一些服务器硬件方面知识. 我们介绍Windows平台的FailOver群集,以多个站点场景为例,如下图示: 八个结点NODE,Windows的FailOver群集,依赖SAN存储同步各个 ...
ArrayList、Vector、HashMap、HashTable、HashSet的默认初始容量、加载因子、扩容增量
这里要讨论这些常用的默认初始容量和扩容的原因是: 当底层实现涉及到扩容时,容器或重新分配一段更大的连续内存(如果是离散分配则不需要重新分配,离散分配都是插入新元素时动态分配内存),要将容器原来的数据全 ...
string相关
1.find相关 string s="abcd"; size_t pos0 = s.find_first_of("dcb"); 1 //返 ...
LeetCode (13): 3Sum Closest
https://leetcode.com/problems/3sum-closest/ [描述] Given an array S of n integers, find three integers ...
hdu 2642 Stars
Problem Description Yifenfei is a romantic guy and he likes to count the stars in the sky. To make t ...
Swift - 高级运算符介绍
除了基本运算符之外,Swift还支持位运算和位移运算,包括: 1,按位取反运算:操作符是 ~ 2,按位与运算:操作符是 & 3,按位或运算:操作符是 | 4,按位异或运算:操作符是 ^ 5 ...
js获取时间相关函数
js获取时间函数 var myDate = new Date; var year = myDate.getFullYear();//获取当前年 var yue = myDate.getMonth()+ ...
nginx+php负载均衡集群环境中的session共享方案梳理
在网站使用nginx+php做负载均衡情况下,同一个IP访问同一个页面会被分配到不同的服务器上,如果session不同步的话,就会出现很多问题,比如说最常见的登录状态. 下面罗列几种nginx负载均衡 ...
JS用斜率判断鼠标进入DIV四个方向的方法 判断鼠标移入方向
本文要介绍的是一种鼠标从一个元素移入移出时,获取鼠标移动方向的思路.这个方法可以帮助你判断鼠标在移入移出时,是从上下左右的哪个方向发生的.这个思路,是我自己琢磨出来,利用了一点曾经高中学过的数学知识, ...
Excel技巧--图表添加平均线为指标
如上图,如果在柱状图有一平均指标线,就能很直观地显示各柱状值是否高于或低于平均值这个指标. 添加方法: (1)为表格制作一个柱状图: 2.对图表点右键,菜单选择“更改图表类型”.对话框如下选择: 3. ...