5.格式化打印
gawk中有同C语言中的printf函数一样用法的函数,如果熟悉C语言的printf函数用法,对gawk格式化打印的理解就会很容易。
格式化指定符的控制字母
c:将一个数作为ASCII字符显示
d:显示一个整数
i:显示一个整数(跟d一样)
e:用科学计数法显示一个数
f:显示一个浮点值
g:用科学计数法或浮点数显示(选择较短的格式)
o:显示一个八进制值
s:显示一个文本字符串
x:显示一个十六进制值
X:显示一个十六进制值,但用大写字母A~F
6.内建函数
6.1 数学函数
gawk数学函数
atan2(x,y)
cos(x)
exp(x)
int(x)
log(x)
rand()
sin(x)
sqrt(x)
srand(x)
6.2 按位操作函数
按位与:and(v1,v2)
按位或:or(v1,v2)
补运算:compl(val)
val左移count位:lshift(val,count)
val右移count位:rshift(val,count)
按位异或:xor(v1,v2)
6.3 字符串函数
gawk字符串函数
asort(s [,d]):将数组s按数据元素值排序。索引值会被替换成表示新的排序顺序的连续数字。另外, 如果指定了d,则排序后的数组会存储在数组d中
asorti(s [,d]):将数组s按索引值排序。生成的数组会将索引值作为数据元素值,用连续数字索引来表 明排序顺序。另外如果指定了d,排序后的数组会存储在数组d中
gensub(r, s, h [, t]):查找变量$0或目标字符串t(如果提供了的话)来匹配正则表达式r。如果h是一个以g 或G开头的字符串,就用s替换掉匹配的文本。如果h是一个数字,它表示要替换掉第h 处r匹配的地方
gsub(r, s [,t]):查找变量$0或目标字符串t(如果提供了的话)来匹配正则表达式r。如果找到了,就 全部替换成字符串s
index(s, t):返回字符串t在字符串s中的索引值,如果没找到的话返回0 length([s]):返回字符串s的长度;如果没有指定的话,返回$0的长度
match(s, r [,a]):返回字符串s中正则表达式r出现位置的索引。如果指定了数组a,它会存储s中匹配正 则表达式的那部分
split(s, a [,r]):将s用FS字符或正则表达式r(如果指定了的话)分开放到数组a中。返回字段的总数
sprintf(format,variables):用提供的format和variables返回一个类似于printf输出的字符串
sub(r, s [,t]):在变量$0或目标字符串t中查找正则表达式r的匹配。如果找到了,就用字符串s替换 掉第一处匹配
substr(s, i [,n]):返回s中从索引值i开始的n个字符组成的子字符串。如果未提供n,则返回s剩下的部分
tolower(s):将s中的所有字符转换成小写
toupper(s):将s中的所有字符转换成大写
6.4 时间函数
mktime(datespec):将一个按YYYY MM DD HH MM SS [DST]格式指定的日期转换成时间戳值
strftime(format[,timestamp]):将当前时间的时间戳或timestamp(如果提供了的话)转化格式化日期(采用shell函数date()的格式)
systime( ):返回当前时间的时间戳
7.自定义函数
除了gawk中的内建函数,还可以在gawk程序中创建自定义函数。
7.1 定义函数
要定义自己的函数,必须用function关键字。
function name([variables])
{
statements
}
7.2 使用自定义函数
在定义函数时,它必须出现在所有代码块之前(包括BEGIN代码块)。
$ gawk '
> function myprint()
>{
> printf "%-16s - %s\n", $1, $4
>}
> BEGIN{FS="\n"; RS=""}
>{
> myprint()
> }' data2
7.3 创建函数库
首先需要创建一个存储所有gawk函数的文件。
$ cat funclib
function myprint()
{
printf "%-16s - %s\n", $1, $4
}
function myrand(limit)
{
return int(limit * rand())
}
function printthird()
{
print $3 }
$
然后使用-f选项使用函数库文件中的函数定义
$ gawk -f funclib -f script4 data2
网友评论