Linux下的数据统计

最近2天CSDN的密码泄漏,部份人可能会像我一样去作一些统计,比如邮箱占有率等一些数据。统计方式五花八门,但我觉得在Linux下用命令组合统计最为方便。

一、基本统计

先看密码文档 www.csdn.net.sql 格式
用户名 # 密码 # 邮箱
以’ # ‘分列
3个字符可以用awk等进行切割

使用到的相关统计命令与参数为

sort
  -g 按照 常规数值排序
  -r  逆序输出排序结果
  -k 排序的列

uniq
  -c 统计数量
  -d 只输出重复的行

注: uniq只能对sort过的数据统计

例:统计密码使用频率并按使用频率从多到少排列
awk -F ‘ # ‘ ‘{print $2}’ www.csdn.net.sql|sort|uniq -cd|sort -rgk1|tee password_frequency.txt
输出

 235012 123456789
 212749 12345678
  76346 11111111
  46053 dearbook
  34952 00000000

...

例2:统计邮箱域名使用频率
@之后的都作为域名一部份,并转成小写,转成小写也可以通过命令tr [:upper:] [:lower:]
perl -pe ‘s/.*@(.*)/lc($1)/ei’ www.csdn.net.sql|tr -d “\r”|sort|uniq -c|sort -rgk1 > email_frequency.txt

1976210 qq.com
1766931 163.com
 807897 126.com
 351594 sina.com
 205491 yahoo.com.cn
...

例3:统计邮箱提供商频率
比如vip.qq.com和qq.com都作qq,只统计常用域名com, net, edu等
perl -ne ‘/.*@.*?([^\.]+)\.(com|edu|net|org|cn).*/i && print “\L$1\n”‘ www.csdn.net.sql|sort|uniq -c|sort -rgk1 > email_agency_frequency.txt

2012384 qq
1785057 163
 808173 126
 396855 sina
 326406 yahoo
 204509 hotmail
 187087 gmail
 105379 sohu
  72470 tom
...

二、图形化统计结果

图形化的工具有gnuplot,R语言等,我这里使用了R语言

例4:由邮箱频率前9名与其余总和生成饼图
输出前9名与其总和 awk ‘NR < 10 { print $1, $2 } NR >= 10 { others += $1} END { print others, “others” }’ email_agency_frequency.txt > email_agency_top10.txt

2012384 qq
1785057 163
808173 126
396855 sina
326406 yahoo
204509 hotmail
187087 gmail
105379 sohu
72470 tom
516409 others

用R语言输出饼图
R脚本

table <- read.table("email_agency_top10.txt")
percent <- round(table$V1/sum(table$V1)*100)
png(file="email_agency_market_share.png", width=500, height=500)
pie(table$V1, labels=paste(table$V2, '(', percent, '%)', sep=""), col=rainbow(length(table$V1)), main="邮箱占有率", family='DejaVu Sans')

三、相关链接

gawk
sed
perl
R语言

发表评论

电子邮件地址不会被公开。 必填项已用*标注