分享

linux三剑客之awk

本帖最后由 sky_mld 于 2023-9-24 21:23 编辑

Linux awk命令是一个文本处理工具,用于对文本文件进行分析、处理和格式化。它可以执行文本分割、数据提取、计算等操作,并将结果输出到标准输出或指定文件中。

Linux三剑客
grep:擅长单纯的查找或匹配文本内容
awk:更适合编辑、处理匹配到的文本内容
sed:更适合格式化文本内容,对文本进行复杂的处理
awk基础
awk模式和操作
awk脚本是由模式和操作组成的。


模式
模式可以是以下任意一个:
1/正则表达式/:使用通配符的扩展集。
2)关系表达式:使用运算符进行操作,可以是字符串或数字的比较测试。
3)模式匹配表达式:用运算符~ (匹配)~! (不匹配)
4BEGIN语句块、pattern语句块、 END语句块:参见
awk的工作原理
操作由一个或多个命令、函数、表达式组成,之间由换行符或分号隔开,并位于大括号内,主要部分是:变量或数组赋值、输出命令、内置函数、控制流语句。
awk脚本基本结构
awk ' BEGIN{ print "start" } pattern{ commands }END{ print "end" }' file
一个awk脚本通常由: BEGIN语句块、能够使用模式匹配的通用语句块、END语句块3部分组成,这三个部分是可选的。任意一一个部分都可以不出现在脚本中,脚本通常是被单引号或双引号中,例如:
awk 'BEGIN{ i=0 } { i++ } END{ print i }' filename
awk "BEGIN{ i=0 } { i++ } END{ print i }" filename

awk的工作原理
awk ' BEGIN{ commands } pattern{ commands }END{ commands } '
第一步:执行BEGIN{ commands } 语句块中的语句;
第二步:从文件或标准输入(stdin)读取一行,然后执行pattern{ commands }语句块,它逐行扫描文件,从第一行到最后一行重复这个过程,直到文件全部被
读取完毕。
第三步:当读至输入流末尾时,执行END{ commands }语句块。

BEGIN语句块在awk开始从输入流中读取行之前被执行,这是一个可选的语句块,比如变量初始化、打印输出表格:的表头等语句通常可以写在BEGIN语句块中。
END语句块在awk从输入流中读取完所有的行之后即被执行,比如打印所有行的分析结果这类信息汇总都是在END语句块中完成,它也是一个可选语句块。
pattern语句块中的通用命令是最重要的部分,它也是可选的。如果没有提供pattern语句块,则默认执行{ print },即打印每一个读取到的行,awk读取的每一行都会执行该语句块。

示例
echo -e "A line 1nA line 2"| awk 'BEGIN{ print
"Start" } { print } END{ print "End" }
Start
A line1
A line 2
End

语法:awk [ options]  { pattern [action]}filename
awk  [选项]    模式{动作}’  文件

awk常用动作:print printf

我们执行的命令是awk '{print $2}' ,没有使用参数和模式,$2 表示输出文本的第二列信息
awk默认以空格为分隔符,且多个空格也识别为一个空格,作为分隔符
awk是按行处理文件,行处理完毕,处理下一行,根据用户指定的分割符去工作,没有指定则默认空格
指定了分隔符后,awk把每一行切割后的数据对应到内置变量
awk内置变量
[/action][/ options]

试读已结束,请付费阅读全文。

  本文只能试读34%,付费后可阅读全文。 

版权说明:论坛帖子主题均由合作第三方提供并上传,若内容存在侵权,请进行举报

没找到任何评论,期待你打破沉寂

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

联系在线客服