经常操作日志的小伙伴们对awk命令肯定不陌生,awk工具给我们分析日志提供了很便捷的操作,帮助我们完成统计和分析日志,也有很多小伙伴不会用到awk。awk作为一个强大的工具,对于我们工作能力和工作效率的提升,都有很多帮助,下面就让我们来领略一下awk的强大吧!

1.awk简介

awk适合文本处理和报表生成,在linux系统日常处理工作中,发挥了重要的作用,awk是三剑客的老大,利刃出销,必将不凡。

2.awk介绍

例如:awk '{print $0}' /etc/passwd

awk命令简单使用

解释:我们执行完上述命令之后,/etc/passwd文件的内容出现在眼前了。

在调用awk时,我们指定/etc/passwd为输入文件。执行awk时,会依次对/etc/passwd中的每一行执行print命令。所有输出都发送到stdout,所得到的结果和cat /etc/passwd相同。

再次强调:awk对输入文件中的每一行都执行这个脚本。

简单说明

例如:awk -F ":" '{print $1}' /etc/passwd

例如:awk -F ":" '{print $1 $3}' /etc/passwd

例如:awk -F ":" '{print $1 " " $3}' /etc/passwd

例如:awk -F ":" '{print "username:"$1 "uid:"$3}' /etc/passwd

3.BEGIN和END模块

对于每个输入行,awk都会执行每个脚本代码块一次。然而,在很多情况下,可能需要在awk开始输入文件中的文本之前执行初始化代码。对于这种情况,awk允许您定义一个BEGIN块。awk在开始处理输入文件之前会执行BEGIN块,所以它是初始化FS(字段分隔符)变量、打印页眉或初始化其他在程序中以后会引用的全局变量的最佳位置。

awk还提供了END模块。awk在处理了输入文件中的所有行之后执行这个块。通常,END块用于执行最终计算或打印应该出现在输出流结尾的摘要信息。

4.运算符

awk运算符

例如:赋值运算符

awk 'BEGIN{a=5;a+=5;print a}'

赋值运算符示例

例如:逻辑运算符

awk 'BEGIN{a=1;b=2;print(a>2&&b>1,a=1||b>1)}'

逻辑运算符示例

例如:正则运算符

awk 'BEGIN{a="100testaaa"; if(a~/100/){print "ok"}}'

例如:关系运算符

说明:>

awk 'BEGIN{a="11";if(a>=9){print "ok"}}'

awk 'BEGIN{a=11;if(a>=9){print "ok"}}'

awk 'BEGIN{a;if(a>=b){print "ok"}}'

关系运算符示例

例如:算术运算符

说明:所有用作算术运算符进行操作,操作数自动转为数值,所有非数值都变为0。

awk 'BEGIN{a="b";print a++, ++a}'

awk 'BEGIN{a="20b4";print a++, ++a}'

awk 'BEGIN{a="b";print a=="b"?"ok":"err"}'

awk 'BEGIN{a="b";print a=="c"?"ok":"err"}'

5.awk内置变量

awk内置变量

例如:字段分隔符FS

FS=""一个或多个Tab分隔

awk 'BEGIN{FS="+"}{print $1,$2,$3}' tab.txt

字段分隔符示例

FS="[[:space:]+]"一个或多个空白格

空白格示例

FS="["":]+"以一个或多个空格或:分隔

空白格示例

字段数量NF

字段数量示例

记录数量NR

记录数量示例

RS记录分隔符变量

将FS设置成""告诉awk每个字段都占据一行。通过将RS设置成"",还会告诉awk每个地址记录都由空白行分隔。

记录分隔符变量示例

OFS输出字段分隔符

输出字段分隔符示例

ORS输出记录分隔符

输出记录分隔符示例

6.awk正则

正则示例

比如:规则表达式

awk '/REG/{action}' file,/REG/为正则表达式,可以将$0中,满足条件的记录送入到:action进行处理。

规则表达式示例

规则表达式示例

比如:布尔表达式

awk '布尔表达式{action}' file仅当对前面的布尔表达式求值为真时,awk才执行代码块。

布尔表达式示例

7.awk的if、循环和数组

比如:条件语句

条件语句示例

使用if语句还可以将代码:

转换为:

比如:循环结构

awk还有"do...while"循环,它在代码块结尾处对条件求值,而不像标准的while循环那样在开始处求值。

循环结构示例

和一般的while循环不同,由于在代码块之后对条件求值,"do...while"循环永远都至少执行一次。

比如:for循环

awk允许创建for循环,它就像while循环。

for循环示例

for简短示例

上面代码打印:

打印结果

比如:break和continue

awk提供了break和continue语句。使用这些语句可以更好的控制awk的循环结果。

死循环示例

break示例

break语句用于"逃出"最深层的循环。"break"使循环立即终止,并继续执行循环代码块后面的语句。

continue语句补充了break。

continue中使用break示例

这段代码打印"iteration1"到"iteration21","iteration4"除外。如果迭代等于4,则增加x并调用continue语句,该语句立即使awk开始执行下一个循环迭代,而不执行代码块的其余部分。如同break一样,continue语句适合各种awk迭代循环。在for循环主体中使用时,continue将使循环控制变量自动增加。如下等价循环:

在while循环中时,在调用continue之前没必要增加x,因为for循环会自动增加x。

比如:数组

awk中的数组都是关联数组,数字索引也会转变为字符串索引

for...in输出,因为数组是关联数组,默认是无序的。所以通过for...in得到无序的数组。如果需要得到有序数组,需要通过下标获得。

比如:用awk中查看服务器连接状态并汇总

比如:统计web日志访问流量,要求输出访问次数,请求页面或图片,每个请求的总大小,总访问流量的大小汇总。

8.awk常用字符串函数

比如:替换

比如:查找

比如:匹配查找

比如:截取

比如:分割

希望对大家有多多帮助,如果大家有什么不懂的知识点,可以在评论区留言,我会给大家一一讲解!

awk 截取部分字符串_linux三剑客-awk相关推荐

  1. awk if 不包含_linux三剑客之awk

    awk(三位作者的名字命名):文本分析工具,Linux及unix环境中功能强大的数据处理工具之一. 相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大. 简单来说awk ...

  2. awk截取字符命令_Linux运维基础技能: 脚本编程与Linux命令

    本系列文章一共三篇,分别为<脚本编程与 Linux 命令>.<接入层与网络基础>和< MySQL 与 SQL 优化>,由腾讯高级工程师 luaruan(阮永顺) 原 ...

  3. awk -f 分隔符 命令_Linux三剑客之awk

    awk命令用法小记 版本:CentOS7 ▼  ▼  ▼  ▼  ▼   ▼  ▼  ▼  ▼ 作别老东家,省略一些心里话,希望尽快度过这段迷茫期,调整好心态,面对疾风吧~ 话不多说进入正题 使用方法 ...

  4. [AWK]使用AWK进行分割字符串以及截取字符串

    如何split当前的字符串,用$0,例如: cat num.2012032911 | awk '{print $2}' | awk '{split($0,b,".");print ...

  5. 常用命令_LINUX三剑客之文本处理(一):分别利用awk和sed命令添加列文本

    常用命令_LINUX三剑客之文本处理 首先是源文本test.tcl @@ cat test.tcl- switch_core_1 HEADBUFMDV32_140P7T35R + FIXED ( 13 ...

  6. 使用AWK进行分割字符串以及截取字符串

    如何split当前的字符串,用$0,例如:  cat num.2012032911 | awk '{print $2}' | awk '{split($0,b,".");print ...

  7. awk if 不包含_linux高级运维必会命令——AWK命令详解及实例分享

    一.awk简介 awk其名称得自于它的创始人 Alfred Aho .Peter Weinberger 和 Brian Kernighan 姓氏的首个字母.实际上 AWK 的确拥有自己的语言: AWK ...

  8. linux三剑客awk、sed、grep与cut的总结

    在Linux中,一切皆文件,对Linux的操作就是对文件的处理.对文件操作处理最重要的三个命令是grep.sed.awk,它们在业界被称为"三剑客". 三剑客的功能非常强大,但它们 ...

  9. awk截取字符命令_bash中的字符截取命令cut和awk

    grep也是字符截取命令(本笔记在查找命令中),是从文件中截取符合条件的行,其他常见的字符截取命令还有: 一.cut列提取命令:cut [选项] 文件名 -f m[,n]:指定提取第m列或第m到第n列 ...

最新文章

  1. 总结python中基本的面试题
  2. Could not create the view An unexpected exception……的问题
  3. atitit.为什么技术的选择方法java超过.net有前途
  4. 爱奇艺Android移动客户端app瘦身经验
  5. 一文了解参数检验和非参数检验
  6. 3G是IPv6的3G(转)
  7. AutoLayout(Ⅱ):遇到的几个小问题(Keng)
  8. 微信小程序服务器和app互通,解读:App 与小程序的互通能力和限制
  9. 电子邮件协议详解(SMTP、POP3、IMAP4)
  10. c语言编程中负1什么意思,C语言中的if(1)是什么意思啊
  11. http状态码(204,304, 404, 504,502)
  12. Unity 实战项目 | Unity实现 双屏或多屏幕 显示效果
  13. java打字游戏课程设计_java课程设计打字游戏
  14. linux开关机 按钮 间隔60秒,解决Linux性能问题的前60秒
  15. 好家伙,都改一样了(破戒更新一次)
  16. 第七届计算机信息素养大赛,第七届全国大学生计算机应用能力与信息素养大赛技术规范.PDF...
  17. 计算机专业论文提纲,计算机专业论文提纲格式模板 计算机专业论文框架怎样写...
  18. 项目管理之项目合同变更
  19. ELK搭建及基础使用(docker版)
  20. ElasticSearch 7.7.0 安装部署

热门文章

  1. 当一百万名记者都嚷嚷着“Facebook 很糟糕”......
  2. Facebook 360度音频编码与渲染
  3. Zookeeper知识点详解
  4. JVM之强引用、软引用、弱引用、虚引用
  5. 微信扫一扫识物的技术揭秘:抠图与检索
  6. python 基础教程(第二版)
  7. nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Address already in use)
  8. ssh 远程登录不用密码 ssh-keygen -t rsa
  9. 用google mock模拟C++对象
  10. 分支管理---解决冲突