用awk聚合和排序
文章目录
- 用awk聚合和排序
- 一、需求
- 1.1 源文件格式
- 1.2 需求
- 二、用awk实现
- 2.1 写法
- 2.2 效果
一、需求
1.1 源文件格式
- 一份csv文件(默认逗号分隔)
- 一共五列,其中一列是用户名
- 文件名:日志文件.csv
type | 日记id | username | title | keyword |
---|---|---|---|---|
日记 | 123 | zhangsan | 张三的周一日记 | 日记 |
日记 | 124 | lisi | 李四的周一日记 | 周一 |
日记 | 125 | zhangsan | 张三的周二日记 | 周二 |
日记 | 126 | wangwu | 王五一周写一篇日记 | 老王 |
日记 | 127 | lisi | 李四周二也写日记 | 周二 |
1.2 需求
对每个人日记数量进行统计,并排序
-
根据username聚合
-
排序:倒序
二、用awk实现
2.1 写法
cat 日志文件.csv|awk -F ',' '{x[$3] += 1} END{for(i in x){print i,x[i]}}' |sort -rn -k 2 -t " " > sorted_by_username_num_日志文件.txt
说明:
- cat:查看文件
- | :管道
- awk : 用awk处理条目
- -F ‘,’ : 用逗号作为分隔符。分隔完之后输出的是 “用户名 出现次数”,例如
zhangsan 2
lisi 2
wangwu 1
- sort: 利用linux的排序
- -t “ ” :sort的参数t,意思是每行用逗号分开。 即分为: zhangsan 和 2
- -n : sort的参数n,标识用数字排序(不然就是字符串排序规则了)
- -k 2:sort的参数k,标识用每行分隔之后的第几个元素排序。用t分隔之后,第一个元素是用户名shangsan,第二个元素是次数 2,所以用第2个元素排序
- -r : sort的参数r, 倒序。
2.2 效果
cat 日记文件.csv|awk -F ',' '{x[$3] += 1} END{for(i in x){print i,x[i]}}' |sort -rn -k 2 -t " "