Linux三剑客(awk-6)-awk项目实战

若何统计日志中,调用某个接口的耗时呢?

此时的需求就是对文本进行复杂的格式处理,那么我们就自然的想到了awk命令。

1. awk语法分析

1. awk的基础语法:

awk [options] 'Pattern{Action}' file
  1. options操作,我们可以指定一些特殊的操作,例如输入分割符,将字符串按照特定的输入进行分割。

  2. Pattern模式,我们可以看做为【条件】,即满足条件(模式)的行才会被处理。一般有

    • 【空模式和关系表达式模式】:awk 'NF==5 {print $0}' test,即满足关系运行符的模式。
    • 【BEGIN模式和END模式】:awk 'BEGIN{print "aaa","bbb"}{print 1,2}'即在处理文本之前或之后的模式。
    • 【正则模式】:awk '/正则表达式/{print $0}' /etc/passwd,即把正则表达式作为条件
    • 【行范围模式】:awk '/正则1/,/正则2/{动作}' file,即匹配正则1和正则2之间的行。
  3. action动作,{}属于【组合语句】类型的动作,组合语句是将多个代码组合成代码块。例如:awk '{ if(NR==1){print $0} }' file。

2. shell脚本参数值

在awk命令中,$1是内置变量,代表的是分割的第一行。

使用options中的-v参数,来声明引用的变量。

在参数传递进来是,赋值给变量,后续直接使用该变量,需要注意的是,在awk命令中,不管是内置变量,还是自定义变量,都不使用$,而是直接使用变量名

需要注意的是,在shell脚本中,使用$来引用变量。

3. 代码编写

1. 效果图

效果图

2. 执行代码

#!/bin/sh

fileName=$1
timeout=$2
echo "[响应时间统计]-[开始]"
##################################################
echo "[统计时间参数准备]-[文件名]-[$fileName]"
echo "[统计时间参数准备]-[时间界限]-[$timeout]"
##################################################
##使用awk正则表达式获取符合条件的行,取第九列:格式:【共耗时-3304-毫秒】【购买单笔-响应】->{"retCode":"4954","retInfo":"响应码不存在","data":{"XML_OUT_CONTENT":"00001220
awk -v fileName=$fileName '/【购买单笔-响应】/{print $9}' ../log/$fileName |
awk -v timeout=$timeout -F- '{if($2>timeout){print $2}}' |sort -rn | xargs | #[-F awk的分割符,打印第2列][-r是降序排列 -n 是按数字排序][xargs 将列变为一行数据]
awk 'BEGIN{print "[统计时间结果准备]-[开始]"}
{for(i=1;i<=NF;i++)
  {sum+=$i}
  if(NF==0){
    printf "%s\n","[统计时间结果]-[日志中没有符合条件的数据]";
    exit
  }
  printf "[平均值]-[%s%s]\n",sum/NF,"ms"}
  {printf "[最大值]-[%s%s]\n",$1,"ms"}
  {printf "[最小值]-[%s%s]\n",$NF,"ms"}
  END{printf "%s%s%s]\n","[响应时间统计结束]-[共统计",NF,"条数据"}'
  1. 使用pattern中的【正则表达式模式】设置条件,只有处理满足条件的资源,才能进行Action操作【此处是截取第9列】。
  2. 使用options中的【-F-】选项,以【-】来截取获取到的资源。设置Action的动作是'{if($2>timeout){print $2}}'
  3. sort的option:-n 依照数组大小排序,-r 以相反的顺序(降序)排序。
  4. awk的内置变量NR是行号,NF是每行的列数。我们此时需要将多行数据设置为一行,即将【标记意义的空格(换行、制表)】转化为【文本意义上的空格】,故使用xargs命令。
  5. 使用exit命令,并不是退出整个awk命令,而是直接执行END模式中的动作。
  6. action中{}是组合动作,即包含一组动作。
  7. printf命令是格式化输出,%s是字符串类型。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,001评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,210评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,874评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,001评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,022评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,005评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,929评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,742评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,193评论 1 309
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,427评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,583评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,305评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,911评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,564评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,731评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,581评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,478评论 2 352

推荐阅读更多精彩内容

  • 转载 原文的排版和内容都更加友好,并且详细,我只是在这里贴出了一部分留作自己以后参考和学习,如希望更详细了解AWK...
    XKirk阅读 3,208评论 2 25
  • awk awk****推荐去看朱双印的博客“awk****从放弃到入门”,写的真的很好,本文的awk****就总结...
    凯睿看世界阅读 1,350评论 1 14
  • awk:报告生成器,格式化文本输出 内容: awk介绍 awk基本用法 awk变量 awk格式化 awk操作符 a...
    BossHuang阅读 1,456评论 0 9
  • 一,awk简介 awk,文本处理三剑客之一,它的名称得自于它的三个创始人Alfred Aho 、Peter Wei...
    千纸鹤V阅读 2,404评论 0 6
  • awk介绍awk变量printf命令:实现格式化输出操作符awk patternawk actionawk数组aw...
    哈喽别样阅读 1,564评论 0 4