1 awk处理流程
awk 按顺序读取文本文件内容,默认以空格区分域。从第一行一直读取到文本的最后一行
可以通过 F 标签重新指定分割域标示。
//将指定文件按照行读取 并且以 : 分割域,分别打印出 正行以及第一个、第二个、第三个域的值
//不同的方法实现上面同样的功能
$ awk 'BEGIN{FS=":"}{print $0,$1,$2,$3}' filename
//这里的BEGIN是指在操作具体函数操作之前的指令,通常配合END使用,也可以单独使用
2 awk 查看字符串是否包含某子串
~ 是包含子串的正则匹配,也可以使用 !~ 不包含,同理,这里还可以使用 >,>=,<,<=,==,!= 进行计算比较。
包含子串还可以使用 '//' 标签。例如
上面的指令 会打印出包含root子串的一整行信息
同理,还可以通过 '//' 标签截取文本中的一整段信息
上面的指令会打印出 文本文件从begin开始到end结束的文本信息
awk查询特定字符开始的字符串
上面指令完成在指定文件中查询以Akl开头的数据行
3 awk 函数的处理
比较通用的处理指令可以被写在 特定的文件中,在适当的地方进行调用可以增加代码的复用性
例如:
定义一个函数体 在文件 fuc.awk ,其内容被编辑为 {print $1,$2 * $3}
调用此函数
4 awk 使用循环
awk中可以使用for 循环,也可以使用 while循环
for 实例:
上面指令将会输出 1,2,3,4
while实例:
5 awk NF NR 的使用
NF : Number of Field,返回的是一个数值,表示指定域的个数
$NF : 返回的则是域本身的值
NR: Number of Records,返回的是一个数值,表示已经读取了多少行数据。
awk 按顺序读取文本文件内容,默认以空格区分域。从第一行一直读取到文本的最后一行
可以通过 F 标签重新指定分割域标示。
//将指定文件按照行读取 并且以 : 分割域,分别打印出 正行以及第一个、第二个、第三个域的值
$ awk -F : '{print $0,$1,$2,$3}' filename
//不同的方法实现上面同样的功能
$ awk 'BEGIN{FS=":"}{print $0,$1,$2,$3}' filename
//这里的BEGIN是指在操作具体函数操作之前的指令,通常配合END使用,也可以单独使用
2 awk 查看字符串是否包含某子串
$ awk '{if($0 ~"root"){print "it matched !"} else{print "nothing..."}}'
~ 是包含子串的正则匹配,也可以使用 !~ 不包含,同理,这里还可以使用 >,>=,<,<=,==,!= 进行计算比较。
包含子串还可以使用 '//' 标签。例如
$ awk '/root/' /etc/passwd
上面的指令 会打印出包含root子串的一整行信息
同理,还可以通过 '//' 标签截取文本中的一整段信息
$ awk '/this is begin str/,/this is end str/' filename
上面的指令会打印出 文本文件从begin开始到end结束的文本信息
awk查询特定字符开始的字符串
$ awk '$0 ~/^Akl.*/{print $0}' filename
上面指令完成在指定文件中查询以Akl开头的数据行
3 awk 函数的处理
比较通用的处理指令可以被写在 特定的文件中,在适当的地方进行调用可以增加代码的复用性
例如:
定义一个函数体 在文件 fuc.awk ,其内容被编辑为 {print $1,$2 * $3}
调用此函数
$ awk -f fuc.awk filename
4 awk 使用循环
awk中可以使用for 循环,也可以使用 while循环
for 实例:
$ echo "" | awk '{for(i=1;i<5;i++){print i}}'
上面指令将会输出 1,2,3,4
while实例:
$ echo "" | awk 'BEGIN{uk=10;print "this is begin line"}{while(uk > 0){print uk;uk--}}END{print "this is end line"}'
5 awk NF NR 的使用
NF : Number of Field,返回的是一个数值,表示指定域的个数
$NF : 返回的则是域本身的值
NR: Number of Records,返回的是一个数值,表示已经读取了多少行数据。