回到: Linux系列文章 Shell系列文章 Awk系列文章 awk变量 awk的变量是动态变量,在使用时声明. 所以awk变量有3种状态: 未声明状态:称为untyped类型 引用过但未赋值状态:unassigned类型 已赋值状态 引用未赋值的变量,其默认初始值为空字符串或数值0. 在awk中未声明的变量称为untyped,声明了但未赋值(只要引用了就声明了)的变量其类型为unassigned. gawk 4.2版提供了typeof()函数,可以测试变量的数据类型,包括测试变量是否声明.…
导读 当你回顾所有到目前为止我们已经覆盖的 awk 实例,从 awk 系列的开始,你会注意到各种实例的所有指令是顺序执行的,即一个接一个地执行.但在某些情况下,我们可能希望基于一些条件进行文本过滤操作,即流程控制语句允许的那些语句. 在 awk 编程中有各种各样的流程控制语句,其中包括: if-else 语句 for 语句 while 语句 do-while 语句 break 语句 continue 语句 next 语句 nextfile 语句 exit 语句 然而,对于本系列的这一部分,我们将…
回到: Linux系列文章 Shell系列文章 Awk系列文章 详细分析awk字段分割 awk读取每一条记录之后,会将其赋值给$0,同时还会对这条记录按照预定义变量FS划分字段,将划分好的各个字段分别赋值给$1 $2 $3 $4...$N,同时将划分的字段数量赋值给预定义变量NF. 引用字段的方式 $N引用字段: N=0:即$0,引用记录本身 0<N<=NF:引用对应字段 N>NF:表示引用不存在的字段,返回空字符串 N<0:报错 可使用变量或计算的方式指定要获取的字段序号. aw…
回到: Linux系列文章 Shell系列文章 Awk系列文章 数据类型 gawk有两种基本的数据类型:数值和字符串.在gawk 4.2.0版本中,还支持第三种基本的数据类型:正则表达式类型. 数据是什么类型在使用它的上下文中决定:在字符串操作环境下将转换为字符串,在数值操作环境下将转换为数值.这和自然语言中的一个词语.一个单词在不同句子内的不同语义是一样的. 隐式转换: 算术加0操作可转换为数值类型 "123" + 0返回数值123 " 123abc" + 0转换…
回到: Linux系列文章 Shell系列文章 Awk系列文章 getline用法详解 除了可以从标准输入或非选项型参数所指定的文件中读取数据,还可以使用getline从其它各种渠道获取需要处理的数据,它的用法有很多种. getline的返回值: 如果可以读取到数据,返回1 如果遇到了EOF,返回0 如果遇到了错误,返回负数.如-1表示文件无法打开,-2表示IO操作需要重试(retry).在遇到错误的同时,还会设置ERRNO变量来描述错误 为了健壮性,getline时强烈建议进行判断.例如: 上…
回到: Linux系列文章 Shell系列文章 Awk系列文章 awk数据筛选示例 筛选行 # 1.根据行号筛选 awk 'NR==2' a.txt # 筛选出第二行 awk 'NR>=2' a.txt # 输出第2行和之后的行 # 2.根据正则表达式筛选整行 awk '/qq.com/' a.txt # 输出带有qq.com的行 awk '$0 ~ /qq.com/' a.txt # 等价于上面命令 awk '/^[^@]+$/' a.txt # 输出不包含@符号的行 awk '!/@/' a…
回到: Linux系列文章 Shell系列文章 Awk系列文章 详细分析awk如何读取文件 awk读取输入文件时,每次读取一条记录(record)(默认情况下按行读取,所以此时记录就是行).每读取一条记录,将其保存到$0中,然后执行一次main代码段. awk '{print $0}' a.txt 如果是空文件,则因为无法读取到任何一条记录,将导致直接关闭文件,而不会进入main代码段. touch x.log # 创建一个空文件 awk '{print "hello world"}'…
回到: Linux系列文章 Shell系列文章 Awk系列文章 awk命令行结构和语法结构 awk命令行结构 awk [ -- ] program-text file ... (1) awk -f program-file [ -- ] file ... (2) awk -e program-text [ -- ] file ... (3) 其中: awk语法结构 awk语法结构即awk代码部分的结构. awk的语法充斥着pattern{action}的模式,它们称为awk rule. 例如:…
回到: Linux系列文章 Shell系列文章 Awk系列文章 awk用法入门 awk 'awk_program' a.txt awk示例: # 输出a.txt中的每一行 awk '{print $0}' a.txt # 多个代码块,代码块中多个语句 # 输出每行之后还输出两行:hello行和world行 awk '{print $0}{print "hello";print "world"}' a.txt 对于awk '{print $0}' a.txt,它类似于…
回到: Linux系列文章 Shell系列文章 Awk系列文章 awk工作流程 参考自:man awk的"AWK PROGRAM EXECUTION"段. man --pager='less -p ^"AWK PROGRAM EXECUTION"' awk 执行步骤:…