本来参考资源:
<<Shell 脚本学习指南>>
1. awk命令行
短程序通常是直接在命令行上提供,而比较长的程序,则委托-f选项指定。
--是特殊选项,指出awk本身已没有更进一步的命令行选项。任何接下来的选项都可被程序使用。
-F选项是用来重新定义默认字段分隔字符,且一般惯例将它作为第一个命令行选项。
fs参数是一个正则表达式,或是被提供作为下一个参数,字段分隔字符也可设置使用内建变量FS所指定的。
2. awk程序模型
awk把输入流--------------> 一连串记录的集合--------------> 每条记录可细分为字段【记录和字段,可指定】
awk程序:
pattern {action}
pattern多半是数字或字符串表达式,但awk以保留字BEGIN与END提供两种特殊模式
与BEGIN关联的操作只会执行一次,在任何命令文件或一般命令行赋值被处理之前,但是在任何开头的-v选项指定已完成之后。它大部分用来处理程序所需要的任何特殊初始化工作。
END操作也只执行一次,用于所有输入数据已被处理完之后,它多半用于产生要报告,或是执行清除操作。
BEGIN与END模式可任意顺序,可存在于awk程序内的任何位置。通常,以BEGIN模式放在程序的第一个位置,将END模式放在最后。当指定多个BEGIN或END模式,则它们将按照在awk程序里面的顺序,一次执行。
3. 程序元素
(1)字符串与字符串表达式
(2)数字与数值表达式
(3)标量变量
(4)数组变量
(5)命令行参数
awk通过内建变量ARGC(参数计数)与ARGV(参数向量,或参数值),让命令行参数可用。
(6)环境变量
内建数组ENVIRON数组并无特别之处,可依需要来加入、删除及修改项目。
4. 记录与字段
(1)记录分隔字符(RS)
(2)字段分隔字符(FS)
(3)字段
5. 模式与操作
(1)模式
(2)操作
6. 语句
(1)连续执行
连续的执行是以一个语句一行或以分号隔开的方式,提供一连串语句列表。
(2)条件式执行
(3)重复执行
(4)其他流程控制语句
break
continue
只针对此记录略过更进一步的模式检查:next语句
针对当前输入文件略过更进一步的模式检查:nextfile语句
略过整个工作的更进一步执行,并返回状态码给Shell:使用exit n语句
(5)用户控制的输入
awk直接处理命令行上标明的输入文件,意指绝大多数的awk程序都不必自己打开与处理文件。它也可以通过awk的getline语句来实现。
(6) 执行外部程序
7. 字符串函数
length(string):求string的长度
子字符串提取:substr(string, start, len)
字母大小写转换:tolower(string),toupper(string)
字符串查找:index(string, find)【返回string中第一次出现find的位置】;rindex(string, find)【返回string中find最后一次出现的位置】
字符串匹配:match(string, regexp)【将string与正则表达式regexp匹配,若匹配,则返回匹配string的索引;不匹配,则返回0;提供对比表达式(string ~ regexp)更多的信息】
字符串替换:sub(regexp, replacement, target)将target与正则表达式regexp进行匹配,将最左边最长的匹配部分替换为字符口中 replacement。
gsub(regexp, replacement, traget)与sub类似,但它会替换所有匹配的字符串。
字符串分割:split(string, array,regexp)将string切割为片段,并存储到array里的连续元素。在数组中,片段放置在匹配正则表达式regexp的子字符串之间。若regexp省略,则使用内建字段分隔符FS的当前默认值。函数会返回array里的元素数量。【字段分隔字符值" "与”[ ]“:前者 会忽略前置与结尾的空白,并于运行时将空白视为一个单独空格,后者则正好匹配一上空格。】
字符串格式化:sprintf(format,expression1,expression2,........)
8. 数值函数