Linux Shell常用技巧(五)

  • A+
所属分类:System

十一. awk编程:
1. 变量:
在awk中变量无须定义即可使用,变量在赋值时即已经完成了定义。变量的类型可以是数字、字符串。根据使用的不同,未初始化变量的值为0或空白字符串" ",这主要取决于变量应用的上下文。下面为变量的赋值负号列表:

符号 含义 等价形式
= a = 5 a = 5
+= a = a + 5 a += 5
-= a = a - 5 a -= 5
*= a = a * 5 a *= 5
/= a = a / 5 a /= 5
%= a = a % 5 a %= 5
^= a = a ^ 5 a ^= 5

除此之外,awk还提供了一组内建变量(变量名全部大写),见如下列表:

变量名 变量内容
ARGC 命令行参数的数量。
ARGIND 命令行正在处理的当前文件的AGV的索引。
ARGV 命令行参数数组。
CONVFMT 转换数字格式。
ENVIRON 从shell中传递来的包含当前环境变量的数组。
ERRNO 当使用close函数或者通过getline函数读取的时候,发生的重新定向错误的描述信息就保存在这个变量中。
FIELDWIDTHS 在对记录进行固定域宽的分割时,可以替代FS的分隔符的列表。
FILENAME 当前的输入文件名。
FNR 当前文件的记录号。
FS 输入分隔符,默认是空格。
IGNORECASE 在正则表达式和字符串操作中关闭大小写敏感。
NF 当前文件域的数量。
NR 当前文件记录数。
OFMT 数字输出格式。
OFS 输出域分隔符。
ORS 输出记录分隔符。
RLENGTH 通过match函数匹配的字符串的长度。
RS 输入记录分隔符。
RSTART 通过match函数匹配的字符串的偏移量。
SUBSEP 下标分隔符。

2. 重新定向:
在动作语句中使用shell通用的重定向输出符号">"就可以完成awk的重定向操作,当使用>的时候,原有文件将被清空,同时文件持续打开,直到文件被明确的关闭或者awk程序终止。来自后面的打印语句的输出会追加到前面内容的后面。符号">>"用来打开一个文件但是不清空原有文件的内容,重定向的输出只是被追加到这个文件的末尾。

3. 条件语句:
awk中的条件语句是从C语言中借鉴来的,见如下声明方式:

4. 循环语句:
awk中的循环语句同样借鉴于C语言,支持while、do/while、for、break、continue,这些关键字的语义和C语言中的语义完全相同。

5. 流程控制语句:
next语句是从文件中读取下一行,然后从头开始执行awk脚本。
exit语句用于结束awk程序。它终止对记录的处理。但是不会略过END模块,如果exit()语句被赋值0--255之间的参数,如exit(1),这个参数就被打印到命令行,以判断退出成功还是失败。

6. 数组:
因为awk中数组的下标可以是数字和字母,数组的下标通常被称为关键字(key)。值和关键字都存储在内部的一张针对key/value应用hash的表格里。由于hash不是顺序存储,因此在显示数组内容时会发现,它们并不是按照你预料的顺序显示出来的。数组和变量一样,都是在使用时自动创建的,awk也同样会自动判断其存储的是数字还是字符串。一般而言,awk中的数组用来从记录中收集信息,可以用于计算总和、统计单词以及跟踪模板被匹配的次数等等。

7. 内建函数:
字符串函数

strftime()
时间格式化函数,其格式化规则等同于C语言中的strftime函数提供的规则,见以下列表:

数据格式 含义
%a Abbreviated weekday name
%A Full weekday name
%b Abbreviated month name
%B Full month name
%c Date and time representation appropriate for locale
%d Day of month as decimal number (01 – 31)
%H Hour in 24-hour format (00 – 23)
%I Hour in 12-hour format (01 – 12)
%j Day of year as decimal number (001 – 366)
%m Month as decimal number (01 – 12)
%M Minute as decimal number (00 – 59)
%p Current locale's A.M./P.M. indicator for 12-hour clock
%S Second as decimal number (00 – 59)
%U Week of year as decimal number, with Sunday as first day of week (00 – 53)
%w Weekday as decimal number (0 – 6; Sunday is 0)
%W Week of year as decimal number, with Monday as first day of week (00 – 53)
%x Date representation for current locale
%X Time representation for current locale
%y Year without century, as decimal number (00 – 99)
%Y Year with century, as decimal number

内置数学函数:

名称 返回值
atan2(x,y) y,x范围内的余切
cos(x) 余弦函数
exp(x) 求幂
int(x) 取整
log(x) 自然对数
sin(x) 正弦函数
sqrt(x) 平方根

转载于:http://www.cnblogs.com/stephen-liu74/archive/2011/11/24/2249766.html

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: