`
cfyme
  • 浏览: 263570 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

常用统计分析 SQL 在 AWK 中的实现

 
阅读更多

本文主要讲述如何在 awk 中实现 SQL 的常用操作,当做个简单的 awk 入门分享。
虽然文中部分 awk 会有其它更简洁高效的 shell 命令去完成,亦或是其它语言去完成,
但这都不在本文的讨论范畴。

注:本文所用到的两个测试文件 user、consumer,分别模拟两张 SQL 表:

user 表,字段: 
id name  addr 

1 zhangsan hubei 
3 lisi tianjin 
4 wangmazi guangzhou 
2 wangwu beijing 

consumer 表,字段: 
id cost date 

1 15 20121213 
2 20 20121213 
3 100 20121213 
4 99 20121213 
1 25 20121114 
2 108 20121114 
3 100 20121114 
4 66 20121114 
1 15 20121213 
1 115 20121114 

测试环境 
OS 版本: 
uname -a 
CYGWIN_NT-6.1 june-PC 1.7.9(0.237/5/3) 2011-03-29 10:10 i686 Cygwin 
awk 版本: 
awk --version 
GNU Awk 3.1.8 

1、查询整张表记录,where 条件过滤,关键词:where
select * from user; awk 1 user;
select * from consumer where cost > 100;
awk '$2>100' consumer


2、对某个字段去重,或者按记录去重,关键词:distinct
select distinct(date) from consumer;
awk '!a[$3]++{print $3}' consumer
select distinct(*) from consumer;
awk '!a[$0]++' consumer


3、记录按序输出,关键词:order by
select id from user order by id;
awk '{a[$1]}END{asorti(a);for(i=1;i<=length(a);i++){print a[i]}}' user


4、取前多少条记录,关键词:limit
select * from consumer limit 2;
awk 'NR<=2' consumer
awk 'NR>2{exit}1' consumer # performance is better


5、分组求和统计,关键词:group by、having、sum、count
select id, count(1), sum(cost) from consumer group by id having count(1) > 2;
awk '{a[$1]=a[$1]==""?$2:a[$1]","$2}END{for(i in a){c=split(a[i],b,",");if(c>2){sum=0;for(j in b){sum+=b[j]};print i"\t"c"\t"sum}}}' consumer


6、模糊查询,关键词:like(like属于通配,也可正则 REGEXP)
select name from user where name like 'wang%';
awk '$2 ~/^wang/{print $2}' user
select addr from user where addr like '%bei';
awk '/.*bei$/{print $3}' user
select addr from user where addr like '%bei%';
awk '$3 ~/bei/{print $3}' user


7、多表 join 关联查询,关键词:join
select a.* , b.* from user a inner join consumer b  on a.id = b.id and b.id = 2;
awk 'ARGIND==1{a[$1]=$0;next}{if(($1 in a)&&$1==2){print a[$1]"\t"$2"\t"$3}}' user consumer


8、多表水平联接,关键词:union all
select a.* from user a union all select b.* from user b;
awk 1 user user
select a.* from user a union select b.* from user b;
awk '!a[$0]++' user user


9、随机抽样统计,关键词:order by rand()
SELECT * FROM consumer ORDER BY RAND() LIMIT 2;
awk 'BEGIN{srand();while(i<2){k=int(rand()*10)+1;if(!(k in a)){a[k];i++}}}(NR in a)' consumer

 

转载地址:http://religiose.iteye.com/blog/1827495

分享到:
评论

相关推荐

    AWK手册 中文帮助文档

    AWK中文帮助文档,包含awk详细讲解以及实例程序

    awk学习awk学习awk学习awk学习

    awk学习awk学习awk学习awk学习awk学习awk学习awk学习

    《SED_单行脚本快速参考》的_awk_实现.txt )

    《SED_单行脚本快速参考》的_awk_实现.txt ) sed using awk

    linux中shell脚本中awk的深入分析

    本文档主要是讲解shell脚本文件中的awk,主要是讲解awk的详情分析,讲解awk的各种情况。各种指令

    awk 基本的一些常用用法

    把实际应用中一些常用的awk的用法进行了总结,包括多文件操作,与shell之间的相互调用等

    AWK中文详细描述

    AWK翻译,描述详细使用 翻译不易,多多包涵 资源共享,人人有责

    LINUX的awk和sed的常用用法

    LINUX的awk和sed的常用用法 LINUX的awk和sed的常用用法

    Sed与awk_中英文高清版

    Sed与awk_中英文高清版

    AWK用法AWK用法AWK用法

    awk ‘/101/’ file 显示文件file中包含101的匹配行。 awk ‘/101/,/105/’ file awk ‘$1 == 5′ file awk ‘$1 == “CT”‘ file 注意必须带双引号 awk ‘$1 * $2 &gt;100 ‘ file awk ‘$2 &gt;5 && $2&lt;=15' file

    awk入门到精通.pdf

    由于awk具有上述特色, 在问题处理的过程中, 可轻易使用awk来撰写一些小工具; 这些小工具 并非用来解决整个大问题,它们只扮演解决个别问题过程的某些角色, 可藉由Shell所提供的pipe 将数据按需要传送给不同的小工具...

    Oracle ass.awk工具

    ass.awk工具用在数据库hang住时分析收集到的systemstate所用,可以清晰明了的查看systemstate中的信息; 命令简单: $ awk -f ass1033.awk [trace_name_file] 在系统hung的时候,systemstate基本等同于hanganalyze...

    Sed与awk 中文第二版

    本书在一开始就给出了一个概述和指南,论述了从grep到sed再到awk不断改进的功能。sed和awk具有相同的命令行语法,以脚本的形式接收用户的命令。因为所有这三个程序都使用unix正则表达式,因此书中用一章的篇幅来...

    awk man中文手册(全)

    awk man中文手册(全) awk 是一种编程语言,用于在linux/unix下对文本和数据进行处理。

    AWK AWK 详细使用文档

    AWK 详细使用文档 AWK 详细使用文档 AWK 详细使用文档

    awk使用手册

    你可能对UNIX比较熟悉,但你可能对awk很陌生,这一点也不奇怪,的确,与其优秀的功能相比,awk还远没达到它应有的知名度。awk是什么?与其它大多数UNIX命令不同的是,从名字上看,我们不可能知道awk的功能:它既不是...

    awk中实现ord函数功能

    主要介绍了awk中实现ord函数功能,ord函数用来将字符转化对应的ascii码,本文给出awk中的ord函数实现方法,需要的朋友可以参考下

    学习和理解AWK的最佳书籍Effective AWK Programming

    强烈建议所有想学awk的同志们阅读(会有很多awk语言之外的启迪) 偶然机会得到,不敢独享,故在此分享所得。  语言发明人写的,肯定不同寻常。因为他们对awk是最了解的,所以简明扼要却不乏深入。我们从中可以读到...

    三剑客之【awk】.html

    awk命令常用用法整理;加入了自己在平时运用中的实例,比如通过查询数据库生成csv文件或insert语句。将markdown文件转换成了html文件。 awk有许多强大的字符串函数 gsub(r,s) #在整个$0中,用s代替r gsub(r,s,t) 在...

    awk参考资料下载awk

    awk参考资料, awk参考资料详情.

    The AWK programming language(中文版)

    AWK的学习资料网上一搜一大片,其实只要静下心来把这本书中的代码敲一遍就可以无视其它的所有材料了。这本书只有电子版,很奇怪,这么好的一本书,国内的出版商怎么没有引入。总之,这是学习AWK必读的一本书,5颗星...

Global site tag (gtag.js) - Google Analytics