LINUX命令-AWK_笔记

初识awk命令,感觉世界又美好了一点,话不多说,我们举个例子:

v0.1版本:

awk -F '[:,]' '/文字过滤条件/ {if($3<1000){sum+=$3;cnt+=1}}END {print sum,cnt,sum/cnt}' test.log

先大概介绍下这段命令的功能:对日志进行过滤,找到包含“文字过滤条件”的行,然后对该行按照“:”和“,”分列,取第三列的值进行判断,若满足条件,就将值累加计入sum;并计数存入cnt。最终,打印累加总和以及计数,还有两者的平均值。

下面分别对命令中的单个功能说明:

  1. 分隔符:-F '[:,]'设置分列的分隔符,多分隔符写在[]中,不设置默认分隔符是空格,单个分隔符设置方式是-F':'
  2. 过滤条件:过滤条件在设置完分隔符后,第二对单引号中用一对斜线(撇)括起来
  3. 分列:按照分隔符分列后,每一列的值通过$+数字的方式引用
  4. 逻辑代码:逻辑代码用大括号包起来,其中的变量可以直接使用,不需要声明;
  5. print函数:用来进行控制台输出。也可以使用管道方式输出到文件中,例如:>> test.txt
  6. 关键字BEGIN和END:BEGIN后面跟着的大括号表示初始运行一次的命令;END后面跟着的大括号,表示结束运行一次的命令;中间的大括号表示每次都会运行的命令.上面例子没有用到BEGIN,其实可以加上“BEGIN {sum=0;cnt=0}”,相当于做了个声明和初始化。
  7. 内置变量NR:其实变量NR就可以起到计数的效果,但是我们的cnt和NR意义不同,特别要注意:NR表示原始文件的行号,例子中的cnt是匹配到的记录的计数。
  8. 内置变量NF:NF变量表示一行被分列后列个数,应用场景为,当列比较多的时候,避免从前往后一个个数,直接从后面书,NF-1表示倒数第二列。

v0.2版本(较为标准的写法):

awk -F '[:,]' '/文字过滤条件/ BEGIN {sum=0;cnt=0} {if($3<1000){sum+=$3;cnt+=1}} END {print sum,cnt,sum/cnt}' test.log

该文为学习笔记,有说错或者不妥的地方欢迎评论讨论!能帮到别人就更好了!

附录:

test.log样例文件

文字过滤条件:参数值,10
其他无关内容
文字过滤条件:参数值,20
文字过滤条件:参数值,30
其他无关内容
文字过滤条件:参数值,50
其他无关内容

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值