变量 |
说明 |
$n | 当前记录的第n个字段,字段间由FS分隔。 |
$0 | 完整的输入记录。 |
ARGC | 命令行参数的数目。 |
ARGIND | 命令行中当前文件的位置(从0开始算)。 |
ARGV | 包含命令行参数的数组。 |
BINMODE | 在非POSIX系统上,这个变量指定的所有I / O使用二进制模式 |
CONVFMT | 数字转换格式(默认值为%.6g) |
ENVIRON | 环境变量关联数组。 |
ERRNO | 最后一个系统错误的描述。 |
FIELDWIDTHS | 字段宽度列表(用空格键分隔)。 |
FILENAME | 当前文件名。 |
FNR | 同NR,但相对于当前文件 |
FPAT |
这是一个正则表达式(字符串),告诉gawk基于匹配正则表达式的文本来创建字段 |
FS | 字段分隔符(默认是任何空格)。 |
IGNORECASE | 如果为真,则进行忽略大小写的匹配。 |
LINT |
当这个变量为真(非零或非空),gawk的行为犹如"--lint"命令行选项 |
NF | 当前记录中的字段数。 |
NR | 当前记录数。 |
OFMT | 数字的输出格式(默认值是%.6g)。 |
OFS | 输出字段分隔符(默认值是一个空格)。 |
ORS | 输出记录分隔符(默认值是一个换行符)。 |
PROCINFO |
这个数组的元素提供访问运行awk程序的信息 |
RLENGTH | 由match函数所匹配的字符串的长度。 |
RS | 记录分隔符(默认是一个换行符)。 |
RT | 每次一条记录被读取的设置 |
RSTART | 由match函数所匹配的字符串的第一个位置。 |
SUBSEP |
数组下标分隔符(默认值是\034)。 |
TEXTDOMAIN | 此变量用于程序的国际化 |
蓝色为新增加的内置变量。
简单举例:
1.
01.sed 1q /etc/passwd | awk '{ FS = ":"; print $1 }'
打印密码第一行,用冒号分隔符
2.
打印文本FILENAME
3. seq 100 | awk 'NR==4,NR==6'
打印4到6行
再介绍几个awk内置的字符串函数,也讲一部分。
length(string):
返回字符串的长度
index(string,serch_string):
返回search_string在字符串中出现的位置
split(string,array,delimiter):
用定界符生成一个字符串列表,并将该列表存入数组
substr(string,array,delimiter):
在字符串中用字符起止便宜量生成子串,并返回该子串
sub(regex,replacement_str,string):
将正则表达式匹配到的第一处内容替换成replacement_str
gsub(regex,replacement_str,string):
和sub()类似。不过该函数会替换正则表达式匹配到的所有内容
match(regex,string):
检查正则表达式是否能够匹配字符串。如果能够匹配,返回非0值;否则,返回0.match()有两个相关的特殊变量,分别是RSTART喝RLENGTH。变量RSTART包含正则表达式所匹配内容的其实位置,而变量RLENGTH包含正则表达式所匹配内容的长度。
举例:
1.$ awk '{ sub(/test/, "mytest"); print }' testfile
在整个记录中匹配,替换只发生在第一次匹配发生的时候
2.$ awk '{ sub(/test/, "mytest"); $1}; print }' testfile
在整个记录的第一个域中进行匹配,替换只发生在第一次匹配发生的时候
3.$ awk '{ print index("test", "mytest") }' testfile
实例返回test在mytest的位置,结果应该是3
4.$ awk '{ print length( "test" ) }'
实例返回test字符串的长度。
awk补充二
这节可能要写的比较粗了,时间太少。
一. 内置函数
注意一种约定俗称语法习惯: [a]代表a可选.
数字函数(Numeric Functions)
函数名 |
说明 |
atan2(y,x) | 返回y/x弧的反正切 |
cos(x) | 返回x的余弦 |
exp(x) | 返回x的指数 |
int(x) | 返回最靠近的整数,风向标指向0 |
log(x) | 返回x的自然对数 |
rand() | 返回随机数 |
sin(x) | 返回x的正弦 |
sqrt(x) | 返回x的正平方根 |
srand([x]) | 生成随机数,可以设置起点 |
字符串操作函数(String-Manipulation Functions)
注意:蓝色部分为gawk特有,awk没有此函数功能。
函数名 |
说明 |
asort(source [, dest [, how ] ]) | 返回数组元素数(内容较多) |
asorti(source [, dest [, how ] ]) | 同asort,(有细微差别) |
gensub(regexp, replacement, how [, target]) | 搜索正则表达式RegExp匹配的regexp |
gsub(regexp, replacement [, target]) | 将正则表达式匹配的第一处内容替换成replacement_str |
index(in, find) | 返回find在字符串in中出现的位置 |
length([string]) | string 中的字符数 |
match(string, regexp [, array]) | 检查正则表达式能否匹配字符串 |
patsplit(string, array [, fieldpat [, seps ] ]) |
划分件到由fieldpat定义的字符串,并存储在array里,分隔字符串存在在seps数组 |
split(string, array [, fieldsep [, seps ] ]) | 用定界符生成一个字符串列表,并将该列表存入数组 |
sprintf(format, expression1, ...) | 打印 |
strtonum(str) | 字符转转换成数字 |
sub(regexp, replacement [, target]) | 将正则表达式匹配到的第一处内容替换成replacement |
substr(string, start [, length]) | 分割字符串,根据其实位置和长度 |
tolower(string) | 转换成小写 |
toupper(string) | 转换成大写 |
输入输出函数(Input/Output Functions)
函数 |
说明 |
close(filename [, how]) | 关闭文件输入输出流 |
fflush([filename]) | 刷新与文件名相关的任何缓冲输出 |
system(command) | 执行操作系统命令,返回值给awk程序 |
时间函数(Time Functions)
函数 |
说明 |
mktime(datespec) | datespec为时间戳格式,与systime()格式一样 |
strftime([format [, timestamp [, utc-flag]]]) | 格式化timestamp的内容,返回日期格式 |
systime() | 返回系统时间,精确到秒 |
位操作函数(Bit-Manipulation Functions)
函数 |
说明 |
and(v1, v2) | v1,v2的与操作结果 |
compl(val) | val的反码 |
lshift(val, count) | 返回val左移count位的值 |
or(v1, v2) | v1,v2的或操作 |
rshift(val, count) | 返回val右移count位的值 |
xor(v1, v2) | 返回v1,v2的异或的值 |
获取类型信息(Getting Type Information)
函数 |
说明 |
isarray(x) | 如果x是数组,返回true.否则false |
字符串转换函数(String-Translation Functions)
函数 |
说明 |
bindtextdomain(directory [, domain]) | 设置awk要搜寻信息的目录和域 |
dcgettext(string [, domain [, category]]) | 返回的字符串string 翻译文本域domain 的语言环境类别category |
dcngettext(string1, string2, number [, domain [, category]]) |
返回string1和string2的翻译数量的复数形式,string1,string2在语言环境类别的文本域里 |
内置函数还有些高级特性,等许多实例,以后有机会补充。
二. 自定义函数
格式入下:
如:
awk这个命令还有很多功能,打算就只写这么多了。以后可能更多在一些例子里,与其他命令结合时会提到。