个人博客,记录知识防止遗忘
awk使用实例: for循环、sort排序
awk使用实例: for循环、sort排序

awk使用实例: for循环、sort排序

内容大纲

需求一: 统计日志中账号对应的错误码数

问题描述:

需要统计出日志中账号和对应的错误码出现的总次数

解决思路:

先用awk将‘appName=账号‘以及‘ret=error:错误码’筛选出来
随后用sort排序,uniq -c去重并统计重复数

解决过程:

日志格式举例
image.png

cat  a.txt | grep 'error:'| grep 'appName=' |
awk '{for(i=1;i<=NF;i++){if($i~/^ret=error.*/ || $i~/^appName=.*/){printf $i" "}};if(i=NF){printf "\n"}}' |sort|uniq -c

awk也可以拆解成以下形式,便于理解,也可正常执行

cat  a.txt | grep 'error:'| grep 'appName=' |
awk '
{
    for(i=1;i<=NF;i++)
        if($i~/^ret=error.*/ || $i~/^appName=.*/)
            printf $i" "
        if(i=NF)
            printf "\n"
}' |sort|uniq -c

命令解释
image.png
执行结果(敏感信息已打码)

image.png
上图结果虽然统计成功,但是未能排序,接着优化

| sort -t ' ' -k 1 -n
# 将结果1通过管道传输给上述命令,
sort -t ‘ ’      指定按空格分割, 
-k 1               指定以第1个字段进行排序
-n                 指定使用数值从小到大排序 

image.png
至此,需求实现


需求二:

发表回复

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