linux的awk在数据筛选、统计等方面经常用到,在此做个简单的记录
什么是awk
awk是行处理器,通常用来格式化文本信息
使用方式
基本用法
|
|
打印
|
|
-F指定分隔符
|
|
匹配代码块
|
|
条件表达式
|
|
逻辑运算符
|
|
数组
netstat -anp|awk ‘NR!=1{a[$6]++} END{for (i in a) print i,”\t”,a[i]}’
典型事例
筛选请求时间大于0
日志文件1秒的请求
10.85.93.250 - - [06/Jul/2018:11:12:31 +0800] "GET /intfs/category/showBatch?parent_id=0 HTTP/1.1" - 200 2562 0.048
10.85.93.155 - - [06/Jul/2018:11:12:39 +0800] "GET /intfs/category/showBatch?parent_id=1 HTTP/1.1" - 200 58 0.048
10.85.93.252 - - [06/Jul/2018:11:13:32 +0800] "GET /intfs/category/showBatch?parent_id=0 HTTP/1.1" - 200 2562 0.045
10.85.93.165 - - [06/Jul/2018:11:13:43 +0800] "GET /intfs/category/showBatch?parent_id=97 HTTP/1.1" - 200 850 1.046
10.85.93.167 - - [06/Jul/2018:11:13:49 +0800] "GET /intfs/category/showBatch?parent_id=97004 HTTP/1.1" - 200 58 0.041
10.85.93.166 - - [06/Jul/2018:11:14:00 +0800] "GET /intfs/category/showBatch?parent_id=0 HTTP/1.1" - 200 2562 0.054
cat access_log.2018-07-06-*|awk -F ‘ ‘ ‘$12>1 {print $0}’
分析access.log获得访问前10位的ip地址
awk ‘{print $1}’ access.log |sort|uniq -c|sort -nr|head -10
sort 对整体数据排序,将相同的行将在一起
uniq -c 统计数量 并在每行开始显示数量 格式: 数量 内容
sort -nr -n 将行按照数字形式比较排序,-r顺序翻转
head -10 取前10条
输出最后一列
awk ‘{print $NF}’
连接字符串
TMALL_INVENTORY_30_GROUP my163149.cm6 3506 5683506 mysql-bin.000013 327359057
TMALL_INVENTORY_31_GROUP my163149.cm6 3606 5683606 mysql-bin.000017 301259529
$1 $2 $3 $4 $5 $6
awk ‘{print $1” : “$2}’ posi.txt
awk ‘{position=$5”:”$6”#”$4; print $1, position}’ posi.txt | awk -F ‘[.]’ ‘{print $1,$2”.”0}’ | awk ‘{print $1,$3}’
- 注意其中postion没有加$
使用””进行字符串连接