Linux复习归纳7-awk

Linux

Linux复习归纳7~

awk

​ AWK适合文本处理和报表生成,最基本功能是在文件或者字符串中基于指定规则浏览和抽取信息。它是以文件的一行作为处理单位。

格式

awk '{pattern + action}' {filenames}	//其中pattern表示查找的内容,action是找到匹配内容后执行的一系列命令

​ 举个简单的例子

1. echo ok | awk '{print "hello,world"}'	//输出hello,world

2. echo ok | awk '{print $0}'		//输出ok

3. awk '{print "ok"}' /etc/passwd	//若passwd文件有n行,那么会输出n行ok

4. awk '{print $0}' /etc/passwd		//原样输出passwd文件

​ 对于一条数据nobody:*:-2:-2:Unprivileged User:/var/empty:/usr/bin/false来说:

$0	//代表一整行的数据
$1~$n	//分别代表一行中不同段的数据
NF	//代表字段的数量
NR	//代表记录的数量(一行代表一条记录)
FS	//代表字段的分隔符(默认为空格,对于上面的数据为:)
RS	//代表记录的分隔符(默认为\n)

指定分隔符

对于这个字段分隔符,我们可以通过-F来指定(可以同时指定多个分隔符),具体用法是:

$ awk -F ":" '{print "name:" $1 "\tuid:" $3}' /etc/passwd

除此之外还有另一种方法:
$ awk '{BEGIN{FS=":"} {print "name:" $1 "\tuid:" $3}}' /etc/passwd

​ 比如查找一个文件从第5行到第8行的内容:

$ awk '{if(NR>=5 && NR<=8) print $0}' test.txt

BEGIN和END模块

​ 在一些情况下,需要在awk处理文本文件前执行初始化代码(比如用于定义全局变量),该代码存储在BEGIN块中。

​ 在一些情况下,也需要在awk处理完文本文件的全部内容后执行某些代码块(比如用于最终计算)。这时可以将该代码存储在END块中。

​ 比如输出passwd文件内容并计算得到行数:

$ awk 'BEGIN {count=0;} {count+=count;print $0} END {print "count is ",count}'

注意点

1. 关系运算符可以用作数值比较,也可用作字符串比较(双方都是数字,自动看作数值比较,否则即为字符串比较)
  1. 所有算术运算符的操作,都会将操作数自动转为数值(字符串也会自动转为数值,非数值都变为0)

支持的结构

条件语句

​ awk支持if、elseif、else的条件语句

循环语句

​ awk支持while、do…while循环语句,也支持for循环语句(for循环支持标准和for…in)

跳转语句

​ awk支持break、continue等跳转语句

数组

​ awk数组属于关联数组,数字索引会转变为字符串索引(数组的下角标为字符串),因此数组默认是无序的。

printf()输出

​ 当然,awk也兼容C中的printf()函数的用法,两者用法一致。

常用字符串函数

sub(Ere, Repl, [ln])	//用Repl替换ln中Ere指定的正则表达式的第一个匹配值,返回替换的数量
gsub(Ere, Repl, [ln])	//用Repl替换ln中Ere指定的正则表达式的全部匹配值,返回替换的数量
index(string1, string2) //判断string2是否在string1中出现,若出现返回第一次出现的下标(下标从1开始),否则返回0
length(string)		//返回string的长度
match(string, Ere)	//返回string中出现Ere指定的正则表达式的位置(下标从1开始),否则返回0
substr(string, M, [N])	//截取string中[M, M+N-1]的子串,若未指定N,则直到string尾部
tolower(string)	//全部转小写
toupper(string)	//全部转大写
sprintf(Format, Expr...)	//格式化字符串
split(string, A, [Ere])	//将string根据指定分隔符Ere将其分割为字符串数组A[1]..A[n]

转载请注明出处!!!

如果有写的不对或者不全面的地方 可通过主页的联系方式进行指正,谢谢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值