awk print 学习

Awk是一种处理结构数据并输出格式化结果的编程语言,Awk是其作者"Aho,Weinberger,Kernighan"的简称。

Awk通常被用来进行格式扫描和处理。通过扫描一个或多个文件中的行,查看是否匹配指定的正则表达式,并执行相关的操作。

Awk的主要特性包含:

1.Awk以记录和字段的方式来查看文本文件

2.和其他编程语言一样,Awk包含变量、条件和循环

3.Awk能够进行运算和字符串操作

4.Awk能够生成格式化的报表数据

Awk从一个文件或者标准输入中读取数据,并输出结果到标准输出中。

1.Awk的语法

Syntax: awk '/search pattern1/ {Actions} /search pattern2/ {Actions}' file

在上诉语法中:

1.searchpattern是正则表达式

2.Actions输出的语法

3.在Awk中可以存在多个正则表达式和多个输出定义

4.file输入文件名

5.单引号的作用是包裹起来防止shell截断

2.Awk的工作方式:

1)Awk一次读取文件中的一行

2)对于一行,按照给定的正则表达式的顺序进行匹配,如果匹配则执行对应的Action

3)如果没有匹配上则不执行任何动作

4)在上诉的语法中,SearchPattern和Action是可选的,但是必须提供其中一个

5)如果SearchPattern未提供,则对所有的输入行执行Action操作

6)如果Action未提供,则默认打印出该行的数据

7){}这种Action不做任何事情,和未提供的Action的工作方式不一样

8)Action中的语句应该使用分号分隔

创建一个包含下面内容的文本文件employee.txt。后续的例子中将会用到该文件

$cat employee.txt 100 Thomas Manager Sales $5,000 200 Jason Developer Technology $5,500 300 Sanjay Sysadmin Technology $7,000 400 Nisha Manager Marketing $9,500 500 Randy DBA Technology $6,000

3.Awk的默认行为

默认的时候awk打印文件中的每一行

$ awk '{print;}' employee.txt 100 Thomas Manager Sales $5,000 200 Jason Developer Technology $5,500 300 Sanjay Sysadmin Technology $7,000 400 Nisha Manager Marketing $9,500 500 Randy DBA Technology $6,000

在上面的例子中,匹配的正则表达式未给出,因此后续的Action适用所有的行,Action中的print没有任何参数的情况下将打印整行,注意其中的Action必须使用{}括起来。

4.Awk打印匹配的行

$ awk '/Thomas/ > /Nisha/' employee.txt 100 Thomas Manager Sales $5,000 400 Nisha Manager Marketing $9,500

在上面的例子中,将打印包含Thomas和Nisha的行,上面的列子包含两个正则表达式。Awk可以接受任意数量的正则表达式,但是每个组合(正则表达式和对应的Action)必须用新行来分隔。

5.Awk仅打印指定的域

Awk包含许多内建的变量,对于每行的记录,Awk默认按照空格进行分割,并将分隔后的值存入对应的$n变量中。如果一行还有4个单词,将被分别存储进$1$2$3$4中,其中$0代表整行。NF也是一个内建的变量,代表该行中分割后的变量数。

$ awk '{print $2,$5;}' employee.txt Thomas $5,000 Jason $5,500 Sanjay $7,000 Nisha $9,500 Randy $6,000 $ awk '{print $2,$NF;}' employee.txt Thomas $5,000 Jason $5,500 Sanjay $7,000 Nisha $9,500 Randy $6,000

在上诉例子中$2和$5分别代表名字和薪水,也可以使用$NF获得薪水,其中$NF代表最后一个字段,在打印语句中逗号是一个连接符号。

6.Awk开始和最后的动作

Awk包含两个重要的关键字BEGIN和END

Syntax: BEGIN { Actions} {ACTION} # Action for everyline in a file END { Actions } # Awk中的注释

在BEGIN节中的Actions会在读取文件中的行之前被执行。

而END节中的Actions会在读取并处理文件中的所有行后被执行。

$ awk 'BEGIN {print "Name\tDesignation\tDepartment\tSalary";} > {print $2,"\t",$3,"\t",$4,"\t",$NF;} > END{print "Report Generated\n--------------"; > }' employee.txt Name Designation Department Salary Thomas Manager Sales $5,000 Jason Developer Technology $5,500 Sanjay Sysadmin Technology $7,000 Nisha Manager Marketing $9,500 Randy DBA Technology $6,000 Report Generated --------------

上述的例子为输出结果增加头和尾描述

7.Awk找出员工ID大于200的员工

$ awk '$1 >200' employee.txt 300 Sanjay Sysadmin Technology $7,000 400 Nisha Manager Marketing $9,500 500 Randy DBA Technology $6,000

在上述例子中,$1代表员工ID,如果员工ID大于200则执行默认的打印整行的Action。

8.Awk打印技术部员工

$4代表员工所在的部门,如果等于Technology则打印出整行

$ awk '$4 ~/Technology/' employee.txt 200 Jason Developer Technology $5,500 300 Sanjay Sysadmin Technology $7,000 500 Randy DBA Technology $6,000

~操作符是和正则表达式中的值进行比较,如果匹配则打印整行

9.Awk打印技术部门的员工数

在下面的例子中,检查员工的部门是否是Technology,如果是则递增count变量的值。Count变量的值在BEGIN的Actions中被初始化为0。

$ awk 'BEGIN { count=0;} $4 ~ /Technology/ { count++; } END { print "Number of employees in Technology Dept =",count;}' employee.txt Number of employees in Tehcnology Dept = 3

在处理的最后(END的Actions),仅仅打印出Technology部门的人数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值