Linux awk sort wc 日志分析

访问日志为500的数量
cat synewod.xinyangwangnet.access.log |awk ‘$9=500’ |wc -l

统计时间段内的访问ip 并排序

cat synewod.xinyangwangnet.access.log |awk ‘$4>"[10/Jan/2019:14:00:00" && $4<="[10/Jan/2050:14:59:59" {sum[$1]++} END {for(ip in sum) print ip,sum[ip]}’ |sort -rn -k 2

统计访问次数据前10的ip,配合使用sort排序
awk ‘{sum[$1]++}END{for(ip in sum) print ip, sum[ip]}’ access_1.log | sort -rn -k 2|head
在此简要说明以下sort命令的参数,-r 逆序,从大到小,-n 已数值作比较,可以连写为-rn;
-k 2 根据第二列进行排序,第二列为sum[ip],即单个ip的访问量;

统计访问量高于某个临界值的ip,例如大于2350.
、awk ‘{sum[$1]++}END{for(ip in sum)if(sum[ip]>2350) print ip, sum[ip]}’ access_1.log | sort -rn -k 2
统计状态码为200、访问量最大的ip前5名(2列)
[root@better~day /usr/local/nginx/logs]# awk ‘{if($6==“200”)sum[$1,$6]++}END{for(ip_num in sum)print ip_num,sum[ip_num]}’ access_1.log |sort -rn -k 2|head -5
100.97.90.71 200 2052
100.97.90.67 200 2047
100.97.90.84 200 2034
100.97.90.78 200 2012
100.97.90.99 200 2009

其它更多列同时分析时,与上类似,sum[$1$2$3]++等等,sum$1,$6与sum$1$6的区别,在于打印的结果是否有空格。

写一个 bash 脚本以统计一个文本文件 words.txt 中每个单词出现的频率。
假设 words.txt 内容如下:

the day is sunny the the
the sunny is is

cat words.txt |awk '{i=1;while(i<=NF){map[、$i]++;i++;}} END { for (w in map) print w,map[w]}'|sort -rn -k 2
cat words.txt |awk '{for(i=1;i<=NF;i++){map[$i]++}} END { for (w in map) print w,map[w]}' |sort -rn -k 2

FS 字段分隔符(默认是任何空格)
IGNORECASE 如果为真,则进行忽略大小写的匹配
NF 一条记录的字段的数目
NR 已经读出的记录数,就是行号,从1开始

从文件中找出长度大于 80 的行:

awk ‘length>80’ log.txt
打印九九乘法表

seq 9 | sed ‘H;g’ | awk -v RS=’’ ‘{for(i=1;i<=NF;i++)printf("%dx%d=%d%s", i, NR, i*NR, i==NR?"\n":"\t")}’

输出第二列包含 “th”,并打印第二列与第四列

$ awk '$2 ~ /th/ {print $2,$4}' log.txt

~ 表示模式开始。// 中是模式。

输出包含 “re” 的行
$ awk '/re/ ’ log.txt

文件列变行

cat file.txt |awk '{for(i=1;i<=NF;i++){ if(NR==1){ res[i]=$i}else{ res[i]=res[i]" "$i;} }} END {for(i=1;i<=NF;i++) { print res[i]}}'
awk '{ #这个大括号里的代码是 对正文的处理
    # NF表示列数,NR表示已读的行数
    # 注意for中的i从1开始,i前没有类型
    for (i=1; i<=NF; i++){#对每一列
        if(NR==1){       #如果是第一行
            #将第i列的值存入res[i],$i表示第i列的值,i为数组的下标,以列序号为下标,
            #数组不用定义可以直接使用
            res[i]=$i;   
        }
        else{
            #不是第一行时,将该行对应i列的值拼接到res[i]
            res[i]=res[i] " " $i
        }
    }
}
 # BEGIN{} 文件进行扫描前要执行的操作;END{} 文件扫描结束后要执行的操作。
END{
    #输出数组
	for (i=1; i<=NF; i++){
		print res[i]
	}
}' file.txt

/export/log/scribe/log

#按时段统计 访问量
cat  log-2017-04-13_00008 | awk -F '-' '{print strftime("%Y%m%d%H%M",$1)}' | sort | uniq -c
#按条件筛选访问量
cat log-2017-05-10_00015 | awk -F '-' '{if($8==42078&& $7==818){print $0}}' |wc -l
cat log-2017-05-10_00015 | grep '818-42078' |wc -l

日志地址:/export/home/logs/stat
查看模拟点击量:wc -l *.log
sort 用法
https://www.cnblogs.com/ding2016/p/9668425.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值