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 ...
随机推荐
- WebSocket和kafka实现数据实时推送到前端
一. 需求背景 最近新接触一个需求,需要将kafka中的数据实时推送到前端展示.最开始想到的是前端轮询接口数据,但是无法保证轮询的频率和消费的频率完全一致,或造成数据缺失等问题.最终确定用利 ...
- DELPHI XE8 远程调试
最近公司项目遇到问题需要远程调试搜索了一下怎么用 发现网上能找到最新的是XE2上的说明现在已经有一些不同了 按照上面的方法不能调试成功 经过测试XE8的方法如下:1.项目编译设置:2.在被调试电脑上运 ...
- JavaWeb系列:Servlet
个人整理,欢迎转载与批评建议,转载请添加索引,谢谢. ---------------------------------------------------------------2017.06.10 ...
- 常见的Message Queue应用场景
在最近的工作的里面有同事问到我说,为什么我们需要一个Message Queue,Message Queue可以在哪些地方用,经过一些整理,大概能找到这些点,假如你有这方面的要求,也可以考虑使用Mess ...
- git 常用的命令符
1. linux操作命令: touch Filename:创建一个文件: mkdir 文件夹名字:创建一个文件夹: cd pathname:切换磁盘: cd ..:返回上一级: rm Filename ...
- H5 web 存储之 Webstorage
H5提供了两种在客户端存储数据的方式:localStorage 持久化的本地存储(浏览器关闭重新打开数据依然存在)sessionStorage 针对一个session的本地存储之前这些都是由cooki ...
- ionic 项目中使用ngCordova插件$cordovaCamera筛选手机图库图片显示出来并上传
原文档请看http://www.ncloud.hk/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/ionic%E5%9B%BE%E7%89%87%E4%B8%8A%E4%B ...
- R语言重要数据集分析研究——R语言数据集的字段含义
R语言数据集的字段含义 作者:马文敏 选择一种数据结构来储存数据 将数据输入或导入到这个数据结构中 数据集的概念 数据集通常是有数据结构的一个矩形数组,行表示规则,列表示变量. 不同的行业对数据集的行 ...
- 学容器必须懂 bridge 网络 - 每天5分钟玩转 Docker 容器技术(32)
上一节我们讨论了 none 和 host 类型的容器网络,本节学习应用最广泛也是默认的 bridge 网络. Docker 安装时会创建一个 命名为 docker0 的 linux bridge.如果 ...
- 微信jssdk分享功能,jssdk成功调用,分享内容自定义失败
前提:调用微信jssdk分享功能,通过微信开发者工具调试,调用正常,无任何报错信息. 问题:调用成功,且开发者工具正常显示,但是通过真机调试,分享出去后,自定义内容失效,为微信自动获取的默认内容!截止 ...