Awk是一种处理结构数据并输出格式化结果的编程语言,
Awk通常被用来进行格式扫描和处理。通过扫描一个或多个文件中的行,查看是否匹配指定的正则表达式,并执行相关的操作。
Awk的主要特性包含:
1.
2.
3.
4.
Awk从一个文件或者标准输入中读取数据,并输出结果到标准输出中。
1.
- Syntax:
-
- awk
'/search pattern1/ {Actions} -
/search pattern2/ {Actions}' file
在上诉语法中:
1.
2.
3.
4.
5.
2.
1)
2)对于一行,按照给定的正则表达式的顺序进行匹配,如果匹配则执行对应的
3)如果没有匹配上则不执行任何动作
4)在上诉的语法中,
5)如果
6)如果
7)
8)
创建一个包含下面内容的文本文件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 '{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
4.
- $
awk '/Thomas/ - >
/Nisha/' employee.txt - 100
Thomas Manager Sales $5,000 - 400
Nisha Manager Marketing $9,500
在上面的例子中,将打印包含Thomas
5.
Awk包含许多内建的变量,对于每行的记录,
- $
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
6.
Awk包含两个重要的关键字
- Syntax:
-
- BEGIN
{ Actions} - {ACTION}
# Action for everyline in a file - END
{ Actions } - #
Awk中的注释
在BEGIN
而END
- $
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 '$1 >200' employee.txt - 300
Sanjay Sysadmin Technology $7,000 - 400
Nisha Manager Marketing $9,500 - 500
Randy DBA Technology $6,000
在上述例子中,$1
8.
$4代表员工所在的部门,如果等于
- $
awk '$4 ~/Technology/' employee.txt - 200
Jason Developer Technology $5,500 - 300
Sanjay Sysadmin Technology $7,000 - 500
Randy DBA Technology $6,000
~操作符是和正则表达式中的值进行比较,如果匹配则打印整行
9.
在下面的例子中,检查员工的部门是否是Technology
- $
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