awk 统计
命令太多,记不住,组合起来用一把…..
示例文件:
1
2
3
4
5
6
7
8
9
10
11
|
[root@lovedan test]# cat a.txt
hello
good
world
hello
hello
good
dandan
good
hello
world
|
场景/分析: 统计a.txt出现次数前3名的单词
- 出现次数用awk统计
- 排名用sort命令排序
- 取文件前N行用head命令
awk命令
awk是以文件的一行为处理单位的,awk每接收文件的一行,然后执行相应的命令处理文本
awk玩法请参考文档12345[root@lovedan test]# awk '{sum[$1]+=1} END {for(k in sum) print k ":" sum[k]}' a.txthello:4dandan:1good:3world:2
注: 如上结果,每读取一行,得取到那个单词,这是$1,有其它的分隔符则-F等,取具体的$n,
以上用sum数组存储,key是自每行的单词,每读取一行加1,END是最终执行,循环打印内容
单词由次数显示出来,则只要按冒号后的数字倒序排序即可
ok,单词及次数已整理出来,只要排序就妥了,sort命令走起
sort命令
- 格式 sort 【参数】【文件】
- 参数 -n 以数字排序
- 参数 -r 倒序
- 参数 -t 第几区间【分隔后分隔后的第几列】
- 参数 -k 以第几区间【分隔后分隔后的第几列】来排序
- eg: sort -n -r -k 2 -t ‘:’ xx.txt -n数字排序方式, -r倒序, -t ‘:’以冒号分隔, -k 2表示以冒号分隔后的第2例
- 结果示例
12345 [root@lovedan test]# awk '{sum[$1]+=1} END {for(k in sum) print k ":" sum[k]}' a.txt | sort -n -r -k 2 -t ':'hello:4good:3world:2dandan:1
ok,排序了后,只用取前多少行就妥了,head命令走起
head命令
- 格式 head 【参数】【文件】
- 参数 -n<行数> 显示的行数
- 显示前10行 head -10 xx.txt
- 结果示例
1234 [root@lovedan test]# head -n 3 a.txthellogoodworld
最终结果
1
2
3
4
|
[root@lovedan test]# awk '{sum[$1]+=1} END {for(k in sum) print k ":" sum[k]}' a.txt | sort -n -r -k 2 -t ':' | head -n 3
hello:4
good:3
world:2
|
貌似上面都复杂了但awk是个神器,uniq命令也可以而有时会显得局限(毕竟日志中没有这么简单的数据)
1
2
3
4
|
[root@lovedan test]# sort a.txt | uniq -c | sort -nr -t ' ' -k 1 | head -n 3
4 hello
3 good
2 world
|
文不对题请见谅,以上都是小打小闹,请君看下面
若有道面试说有个文件中有1000W行,每行一个单词,现要统单词词频排名前10的查询出来
你有哪些方案方法?
- shell统计如上
读取文件再统计排名前10(如下python)
12345678910# encoding=utf-8from collections import defaultdictwords = defaultdict(int)with open('/usr/local/test/a.txt') as f:for line in f:words[line.strip()] += 1list = sorted(words.items(), key=lambda words: words[1],reverse=True)print(list[0:10])若文件大到几个G,数据条数过亿,而且最快最高效率完成目标
面试官问你怎么办?答:MapReduce 见【传送门*大世界^_^】
重要的是思维与格局,分而治之,智慧合作
awk 统计的更多相关文章
- awk统计命令(求和、求平均、求最大值、求最小值)
本节内容:awk统计命令 1.求和 cat data|awk '{sum+=$1} END {print "Sum = ", sum}' 2.求平均 cat data|awk '{ ...
- awk 统计出现次数--转
知识点: 1)数组 数组是用来存储一系列值的变量,可通过索引来访问数组的值. Awk中数组称为关联数组,因为它的下标(索引)可以是数字也可以是字符串. 下标通常称为键,数组元素的键和值存储在Awk程序 ...
- 使用awk统计字段重复实践
awk awk是一种规格化文件的分析工具, 主要处理对象类似数据库导出的条目文本文件, 其中一行,就对应一个记录,每个记录包含若干个字段. 类似这种文本: [root@www ~]# last -n ...
- awk 统计数据在文件中的出现次数
突然发现awk原来可以统计同一数据在要处理的文件中所出现的次数.原来的时候为了分析数据还自己写程序,哎,无语,当时还以为自己多强,手工分析不过来的东西写程序处理.现在想来实在是年少轻狂.解决问题嘛,不 ...
- shell awk统计重复个数
awk是一个很强大的工具,一个常见的用法就是统计一个文件中重复的列值的个数,这也是面试时面试官经常问的一个问题. 举个例子: 有个文件file.log的内容如下: http://www.sohu.co ...
- awk统计文本里某一列重复出现的次数
比如这样的场景:现在有一个文本,里面是这样的内容: NOTICE: 12-14 15:11:13: parser. * 6685 url=[http://club.pchome.net/threa ...
- 利用 awk 统计nginx 中某一个用户的访问次数
线上总是会遇到攻击,所以就需要分析 access.log 看看那些用户的访问次数不正常,针对这些不正常的用户,要做处理,以 access.log为例说明下怎么统计. 通过 access.log 日志来 ...
- awk统计文件大小
在Linux系统中,经常会遇到某个目录下文件很多,要统计这些文件的空间大小.可以采用awk来实现.如下是实现这个功能的例子. vim sum.sh #!/bin/bash# sum.shcd //ba ...
- awk 统计文件中按照某列统计某列的和(sum)
把第一列相同的名称的第二列加起来: [root@localhost cc]# cat 1.txtaaa 10 bbb 20aaa 30ccc 40ccc 20ccc 40 [root@localhos ...
随机推荐
- Linux 安装Nginx+PHP+MySQL教程
一.安装nginx 通过yum安装openssl: yum -y install openssl openssl-devel 通过yum安装pcre: yum -y install pcre-deve ...
- GoF23种设计模式之行为型模式之责任链模式
一.概述 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这些对象连成一条链,并且沿着这条链传递请求,直到有一个对象处理它为止.其设计思想是:给对多个对象处理一个请求的机会, ...
- mysql查询的语法
单表查询语法 SELECT DISTINCT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY field HAVING 筛选 ORDER BY field LIMIT 限制条 ...
- zuul session 不一致的问题
配置文件: #不加这句话导致session不一致zuul.routes.intelligentsia-authority.sensitiveHeaders = Authorization 过滤器里面 ...
- Leetcode28--->字符串的匹配(KMP)
题目: 题目的本质是给定两个字符串str1,str2,求str1中的str2串开始的地方,即字符串的匹配,KMP算法 思路:时间复杂度为O(m + n),空间复杂度为O(n),原串的长度为m,子串的长 ...
- [笔记]BFS算法的python实现
#!/usr/bin/env python # -*- coding:utf-8 -*- graph = {} graph["you"] = ["alice", ...
- 【转】C#中的implicit 和 explicit
The implicit and explicit keywords in C# are used when declaring conversion operators. Let's say tha ...
- JDBC 学习笔记(七)—— CallableStatement
在大型关系型数据库中,有一组为了完成特定功能的 SQL 语句集被称为存储过程(Stored Procedure),它是数据库中的对象. JDBC 使用 CallableStatement 对象,完成对 ...
- 【Luogu】P3224永无乡(splay)
题目链接 splay模板,启发式合并(其实就是暴力插入)即可. 顺便吐槽时限,带垃圾回收而已……不至于最后一个点死活不让过吧? #include<cstdio> #include<c ...
- 洛谷P2664 树上游戏 【点分治 + 差分】
题目 lrb有一棵树,树的每个节点有个颜色.给一个长度为n的颜色序列,定义s(i,j) 为i 到j 的颜色数量.以及 现在他想让你求出所有的sum[i] 输入格式 第一行为一个整数n,表示树节点的数量 ...