【awk终极总结】 您所在的位置:网站首页 shell编程字符串比较 【awk终极总结】

【awk终极总结】

2024-05-31 19:22| 来源: 网络整理| 查看: 265

awk简介

awk其名称得自于它的创始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母。实际上 AWK 的确拥有自己的语言: AWK 程序设计语言 , 三位创建者已将它正式定义为“样式扫描和处理语言”。它允许您创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其他的功能。 awk 是一种很棒的语言,它适合文本处理和报表生成,其语法较为常见,借鉴了某些语言的一些精华,如 C 语言等。在 linux 系统日常处理工作中,发挥很重要的作用,掌握了 awk将会使你的工作变的高大上。 awk 是三剑客的老大,利剑出鞘,必会不同凡响。

使用方法 awk [option] ' [pattern]{pattern_block} {block1} {block2} [pattern]{pattern_block}' filenames # 这里写的pattern一般是BEGIN和END #BEGIN后的代码块是处理文件之前的代码 #END后的代码块是处理完文件之后的代码 # 中间的blocks们是处理每一行时要执行的语句t

实例: vth_zz.txt中的内容:

vth_zz

代码:

awk -F '_' 'BEGIN{print("a")}{print($1)}{print($2)}' vth_zz.txt

结果:

a vth zz

当然啦,也可以用|把前面cat到的东西给awk。 注意awk是逐行操作的,意思就是所有的代码都是对某一行进行处理的,从文件头执行到文件尾。 对于print语句来说,$0代表整行,$1代表第一个字段值…以此类推。$NF代表最后一个字段的值,为啥呢?因为每一行的字段数(什么叫字段数?就是分割之后,有多少段就是字段数)在awk中是NF,那么$NF自然就是最后一个字段的值啦。同理,$(NF-1)就是倒数第二个字段的值。 -F参数的意思是分隔符,-F后面的字符串'xxx'就是分隔符(按照xxx进行分割,也就是说不只是一位,还可以是多位)。 如果想按照多种字符进行分割,可以'[ -]'这样,这样的意思就是遇到空格也分,遇到-也分。跟正则差不多。 也可以这样玩'[ _]z',意思是遇到' z'要分割,遇到_z也要分割。

BEGIN 和 END 模块

通常,对于每个输入行, awk 都会执行每个脚本代码块一次。然而,在许多编程情况中,可能需要在 awk 开始处理输入文件中的文本之前执行初始化代码。对于这种情况, awk 允许您定义一个 BEGIN 块。 因为 awk 在开始处理输入文件之前会执行 BEGIN 块,因此它是初始化 FS(字段分隔符)变量、打印页眉或初始化其它在程序中以后会引用的全局变量的极佳位置。 awk 还提供了另一个特殊块,叫作 END 块。 awk 在处理了输入文件中的所有行之后执行这个块。通常, END 块用于执行最终计算或打印应该出现在输出流结尾的摘要信息。

awk运算符

在这里插入图片描述 awk中,代码块中的多行语句可以用;进行分割,多个参数可以用,进行分割。 awk 赋值运算符:a+=5;等价于: a=a+5;其他同类

[root@Gin scripts]# awk 'BEGIN{a=5;a+=5;print a}' 10

awk逻辑运算符:

[root@Gin scripts]# awk 'BEGIN{a=1;b=2;print (a>2&&b>1,a=1||b>1)}' 0 1

为真输出1,为假输出0

awk正则运算符:

[root@Gin scripts]# awk 'BEGIN{a="100testaa";if(a~/100/) {print "ok"}}' ok [root@Gin scripts]# echo|awk 'BEGIN{a="100testaaa"} {if(a~/test/){print "ok"}}' ok

正则运算符的用法:

/这里写正则表达式就可以啦/ 判断是不是匹配用 ~ 和 !~

解释:

Q:为什么第一条语句都写在BEGIN块中? A:因为写在BEGIN块中不需要给awk指定一个文件,用作写DEMO再合适不过了 Q:为什么第二条语句要这么写? A:这个演示了awk接受|过来的东西时的处理流程

关系运算符: 如: > 和



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有