shell统计文本中单词的出现次数
Ubuntu14.04
给定一个文本,统计其中单词出现的次数
方法1
# solution 1
grep与awk配合使用,写成一个sh脚本 fre.sh
sh fre.sh wordfretest.txt
#! /bin/bash# solution 1 ] then echo "Usage:$0 args error" exit fi ] then echo "analyse the first file $1" fi #get the first file filename=$ grep -E -o "\b[[:alpha:]]+\b" $filename | awk ' { count[$0]++ } END{printf("%-20s%s\n","Word","Count"); for(word in count) {printf("%-20s%s\n",word,count[word])} }'
###########################
# 先判断输入是否正确,如果输入大于1个文件,用第一个文件
# 用grep把单词提取出来,用awk来统计这些单词;最后打印出来
###########################
补充说明:
参数说明: -eq:等于 \b backspace printf参数 |
awk说明 awk由内容和动作组成;awk pattern {action} pattern可以是 BEGIN; END; expression; expression , expression; 可以执行 for ( var in array ) statement |
1.BEGIN模块:这个模块包括了一个操作块(也就是"{ }"内的内容)。该操作块是在文件输入之前执行的, 也就是不需要输入任何文件数据,也能执行该模块。 BEGIN模块常用于设置修改内置变量如(OFS,RS,FS等),为用户自定义的变量赋初始值或者打印标题信息等。 BEGIN模块中的语句操作以“;”标志或者分行隔开。 eg: awk 'BEGIN{print "Hello World! Begin doing!"}' #输出字符串 2. END模块:与BEGIN模块相反,是处理完文件后的操作。不匹配任何输入行,常用于输出一些总结信息。 |
匹配表达式:
[[:alpha:]] 代表 字母
[[:alnum:]] 代表 字母与数字字符
[a-zA-Z0-9]代表单个字母和数字字符
grep -E "\b[[:alpha:]]+\b" move.sh
匹配到 move.sh 中所有的单词
grep -E -o "\b[[:alpha:]]+\b" move.sh
把匹配到的单词每行1个打印出来
"\b[[:alpha:]]+\b"
能匹配到整个单词
方法2
假设 words.txt 是目标文件,只用一行代码
# solution 2
awk -F' ' '{for(i=1;i<=NF;i=i+1){print $i}}' words.txt |sort|uniq -c|sort -nr|awk -F' ' '{printf("%s %s\n",$2,$1)}'
通常,awk逐行处理文本。awk每接收文件的一行,然后执行相应的命令来处理。
用legal文件来做示例
$ cat /etc/legal The programs included with the Ubuntu system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law.
# 搜索统计单词“law”的个数 $ awk -F : '/law/{count++} END{print "the count is ",count}' /etc/legal the count is # 统计单词“the”的个数 $ awk -F : '/the/{count++} END{print "the count is ",count}' /etc/legal the count is
找到指定单词,自定义变量count自增,最后输出语句和count值
命令sort,把各行按首字母排列顺序重新排列起来
sort -nr,每行都以数字开头,按数字从达到小,排列各行
uniq -c,统计各行出现的次数,并把次数打印在每行前端
awk参数 NF - 浏览记录的域的个数
综合起来,命令就是
awk -F' ' '{for(i=1;i<=NF;i=i+1){print $i}}' /etc/legal | sort|uniq -c|sort -nr|awk -F' ' '{printf("%s %s\n",$2,$1)}'
最后的awk调换了单词和数字的位置
统计 /etc/legal 中单词出现次数,并以“单词 次数”格式输出结果
shell统计文本中单词的出现次数的更多相关文章
- Spark——统计文本中单词出现的次数
示例一:统计所有单词出现的次数 1.在本地创建文件并上传到hdfs中 #vin data.txt //将文件上传到hadoop的根目录下 #hdfs dfs -put data.txt / 2.在sp ...
- java统计文本中单词出现的个数
package com.java_Test; import java.io.File; import java.util.HashMap; import java.util.Iterator; imp ...
- Linux统计文件中单词出现的次数
grep -E "\b[[:alpha:]]+\b" /etc/fstab -o | sort | uniq -c 或 awk '{for(i=1;i<NF;i++){c ...
- Python 统计文本中单词的个数
1.读文件,通过正则匹配 def statisticWord(): line_number = 0 words_dict = {} with open (r'D:\test\test.txt',enc ...
- python统计文本中每个单词出现的次数
.python统计文本中每个单词出现的次数: #coding=utf-8 __author__ = 'zcg' import collections import os with open('abc. ...
- N个任务掌握java系列之统计一篇文章中单词出现的次数
问题:统计一篇文章中单词出现的次数 思路: (1)将文章(一个字符串存储)按空格进行拆分(split)后,存储到一个字符串(单词)数组中. (2)定义一个Map,key是字符串类型,保存单词:valu ...
- C#统计给定的文本中字符出现的次数,使用循环和递归两种方法
前几天看了一个.net程序员面试题目,题目是”统计给定的文本中字符出现的次数,使用循环和递归两种方法“. 下面是我对这个题目的解法: 1.使用循环: /// <summary> /// 使 ...
- Python的 counter内置函数,统计文本中的单词数量
counter是 colletions内的一个类 可以理解为一个简单的计数 import collections str1=['a','a','b','d'] m=collections.Counte ...
- Linux统计文本中某个字符串出现的次数
常用的有如下两种方式: 1.VIM 用vim打开文件,然后输入: :%s/hello//gn 如下图: 图中的例子就是统计文本中"hello"字符串出现的次数 说明: %s/pat ...
随机推荐
- java基础(十一章)
一.理解什么是类和对象 万事万物皆对象 1.属性--对象具有的特征(特点) 2.方法--对象可执行的操作(能干什么事) 3.对象的定义: 是一个客观存在的,看的见或摸得着的 ...
- Nginx实用教程(一):启动、停止、重载配置
Nginx是一个功能强大的web服务器和负载均衡软件,由俄罗斯人开发.Nginx包括一个master进程和数个worker进程,master进程用于读取.解析配置文件和管理worker进程,worke ...
- CSS3学习系列之选择器(三)
E:enabled伪类选择器和E:disabled伪类选择器 E:enabled伪类选择器用来指定元素处于可用状态的样式. E:disabled伪类选择器用来指定当元素处于不可用状态时的样式. 当一个 ...
- AngularJS高级程序设计读书笔记 -- 服务篇
服务是提供在整个应用程序中所使用的任何功能的单例对象. 单例 : 只用一个对象实例会被 AngularJS 创建出来, 并被程序需要服务的各个不同部分所共享. 1. 内置服务 一些关键方法也被 Ang ...
- response.sendRedirect页面跳转的方法总结——实习第六天
今天想到要写这个博客完全是因为今天在这上面摔了一跤,同时也意识到了对于一个学Java的人来讲,知其然并且知其所以然是有多么的重要. 今天报了一个错误,讲的是空指针异常,原因就是在response.se ...
- Hibernate执行原生态sql语句
@Override public Integer update(String id, String username){ String sql = "update Team_CheLiang ...
- 推荐几款.NET客户端开源报表图
如果你正在开发客户端报表图相关的应用,除了.NET自带的控件,你还可以考虑使用以下几个控件库. [OxyPlot] OxyPlot是一个支持.NET的跨平台绘图库.你可以在很多平台上使用它,如WPF, ...
- mysql 转义字符
在用户提交表单的时候,有的用户会提交一些特殊字符,比如单引号双引号,此时,如果直接按正常字符串插入数据库的话,可能会出现无法正确插入数据库 PDO::quote 转义mysql语句中的单引号和双引号 ...
- 一些爬虫中的snippet
1.tornado 一个精简的异步爬虫(来自tornado的demo) #!/usr/bin/env python import time from datetime import timedelta ...
- ajax同步请求JS代码
ajax同步请求JS代码 <script type="text/javascript"> var txt = document.getElementById('txt' ...