awk 截取部分字符串_linux三剑客-awk
经常操作日志的小伙伴们对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相关推荐
- awk if 不包含_linux三剑客之awk
awk(三位作者的名字命名):文本分析工具,Linux及unix环境中功能强大的数据处理工具之一. 相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大. 简单来说awk ...
- awk截取字符命令_Linux运维基础技能: 脚本编程与Linux命令
本系列文章一共三篇,分别为<脚本编程与 Linux 命令>.<接入层与网络基础>和< MySQL 与 SQL 优化>,由腾讯高级工程师 luaruan(阮永顺) 原 ...
- awk -f 分隔符 命令_Linux三剑客之awk
awk命令用法小记 版本:CentOS7 ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ 作别老东家,省略一些心里话,希望尽快度过这段迷茫期,调整好心态,面对疾风吧~ 话不多说进入正题 使用方法 ...
- [AWK]使用AWK进行分割字符串以及截取字符串
如何split当前的字符串,用$0,例如: cat num.2012032911 | awk '{print $2}' | awk '{split($0,b,".");print ...
- 常用命令_LINUX三剑客之文本处理(一):分别利用awk和sed命令添加列文本
常用命令_LINUX三剑客之文本处理 首先是源文本test.tcl @@ cat test.tcl- switch_core_1 HEADBUFMDV32_140P7T35R + FIXED ( 13 ...
- 使用AWK进行分割字符串以及截取字符串
如何split当前的字符串,用$0,例如: cat num.2012032911 | awk '{print $2}' | awk '{split($0,b,".");print ...
- awk if 不包含_linux高级运维必会命令——AWK命令详解及实例分享
一.awk简介 awk其名称得自于它的创始人 Alfred Aho .Peter Weinberger 和 Brian Kernighan 姓氏的首个字母.实际上 AWK 的确拥有自己的语言: AWK ...
- linux三剑客awk、sed、grep与cut的总结
在Linux中,一切皆文件,对Linux的操作就是对文件的处理.对文件操作处理最重要的三个命令是grep.sed.awk,它们在业界被称为"三剑客". 三剑客的功能非常强大,但它们 ...
- awk截取字符命令_bash中的字符截取命令cut和awk
grep也是字符截取命令(本笔记在查找命令中),是从文件中截取符合条件的行,其他常见的字符截取命令还有: 一.cut列提取命令:cut [选项] 文件名 -f m[,n]:指定提取第m列或第m到第n列 ...
最新文章
- 总结python中基本的面试题
- Could not create the view An unexpected exception……的问题
- atitit.为什么技术的选择方法java超过.net有前途
- 爱奇艺Android移动客户端app瘦身经验
- 一文了解参数检验和非参数检验
- 3G是IPv6的3G(转)
- AutoLayout(Ⅱ):遇到的几个小问题(Keng)
- 微信小程序服务器和app互通,解读:App 与小程序的互通能力和限制
- 电子邮件协议详解(SMTP、POP3、IMAP4)
- c语言编程中负1什么意思,C语言中的if(1)是什么意思啊
- http状态码(204,304, 404, 504,502)
- Unity 实战项目 | Unity实现 双屏或多屏幕 显示效果
- java打字游戏课程设计_java课程设计打字游戏
- linux开关机 按钮 间隔60秒,解决Linux性能问题的前60秒
- 好家伙,都改一样了(破戒更新一次)
- 第七届计算机信息素养大赛,第七届全国大学生计算机应用能力与信息素养大赛技术规范.PDF...
- 计算机专业论文提纲,计算机专业论文提纲格式模板 计算机专业论文框架怎样写...
- 项目管理之项目合同变更
- ELK搭建及基础使用(docker版)
- ElasticSearch 7.7.0 安装部署
热门文章
- 当一百万名记者都嚷嚷着“Facebook 很糟糕”......
- Facebook 360度音频编码与渲染
- Zookeeper知识点详解
- JVM之强引用、软引用、弱引用、虚引用
- 微信扫一扫识物的技术揭秘:抠图与检索
- python 基础教程(第二版)
- nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Address already in use)
- ssh 远程登录不用密码 ssh-keygen -t rsa
- 用google mock模拟C++对象
- 分支管理---解决冲突