原文地址:
http://www.thegeekstuff.com/2010/01/awk-introduction-tutorial-7-awk-print-examples/
这个而里面排版不好编排,请下载pdf的格式阅读。翻译水平有限,欢迎拍砖。
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.
search pattern是正则表达式
2.
Actions 输出的语法
3.
在Awk
中可以存在多个正则表达式和多个输出定义
4.
file 输入文件名
5.
单引号的作用是包裹起来防止shell
截断
2.
Awk的工作方式:
1)
Awk
一次读取文件中的一行
2)对于一行,按照给定的正则表达式的顺序进行匹配,如果匹配则执行对应的
Action
3)如果没有匹配上则不执行任何动作
4)在上诉的语法中,
Search Pattern
和
Action
是可选的,但是必须提供其中一个
5)如果
Search Pattern
未提供,则对所有的输入行执行
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
部门的人数
相关推荐
awk介绍:This is a brief introduced awk document.
awk的详细介绍,awk的使用介绍,awk的使用教程,awk的学习宝典
awk '{ if(NR>1) print $0 }' /proc/net/tcp | awk 'BEGIN{ FS=" "} { print $2,$3,$4,$5,$8 }' | sed 's/:/ /g' | awk -F" " ' { if($5="01") print $1, $2, $3, "ESTABLISHED", $5, $6, $7, $8, $9; else if...
awk学习awk学习awk学习awk学习awk学习awk学习awk学习
任何awk语句都由模式和动作组成。...模式部分决定动作语句何时触发及触发事件。处理即对数据进行的操作。如果省略模式部分,动作将时刻保持执行状态。 模式可以是任何条件语句或复合语句或正则表达式。
awk 介绍.awk unix shell
各范例由浅入深, 彼此间相互连贯,范例中并对所使用的awk语法及指令辅以必要的说明. 有关 awk的指令, 函数,...等条列式的说明则收录于附录中, 以利读者往后撰写程序时查阅. 如此编排, 可让读者在短时间内顺畅地学会...
主要介绍了shell 里 awk print 的用法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
awk ‘/101/’ file 显示文件file中包含101的匹配行。 awk ‘/101/,/105/’ file awk ‘$1 == 5′ file awk ‘$1 == “CT”‘ file 注意必须带双引号 awk ‘$1 * $2 >100 ‘ file awk ‘$2 >5 && $2<=15' file
AWK-4121系列室外无线AP/网桥/客户端为工业应用提供了理想的 3合1无线解决方案,适用于不便接线、布线成本昂贵或使用移动 TCP/IP网络连接设备的场合
这本书对awk的编程模型、基本语法有简单明了的介绍,在进行数据处理、文本处理、报表、试验算法方面的应用也有很多好的实例。 由于是88年的老书,其中对gawk最新版本对awk的扩展没有提及,但这并不妨碍其称为一本...
AWK 详细使用文档 AWK 详细使用文档 AWK 详细使用文档
此为linux中awk语句的详细使用教程。
awk参考资料, awk参考资料详情.
$awk '/sun/{print}' mydoc 由于显示整个记录(全行)是awk的缺省动作,因此可以省略action项。 $awk '/sun/' mydoc 例:下面是一个较为复杂的匹配的示例: $awk '/[Ss]un/,/[Mm]oon/ {print}' myfile
因为遇到了awk问题,所以找到这个小结,共享一下
第二版介绍了awk的POSIX标准,同时介绍了一些可免费使用的以及商业版的awk。 本书在一开始就给出了一个概述和指南,论述了从grep到sed再到awk不断改进的功能。sed和awk具有相同的命令行语法,以脚本的形式接收用户的...