本文共 2275 字,大约阅读时间需要 7 分钟。
– Start
awk 是一种弱类型的语言,它并不像 Java 等其他语言那样严格区分数字和字符串。那 awk 是如何来识别一个变量中存储的是数字还是字符串的呢?答案就是操作符。操作符需要什么类型的数据,变量就会被转换成什么类型的数据。如果对两个变量进行数学运算,那么不管这两个变量中存储的是什么,它们都将被转换为数字。如果字符串中包含的不是数字,它将会被转换成 0。此外,变量也不需要提前申明,变量名区分大小写。#! /usr/bin/awk -fBEGIN { # 定义整数 int1 = 10; int2 = -10; int3 = 10e2; # 10 乘以 10 的 2 次方,e不区分大小写 octal = "\377"; # 八进制以 \ 开头 hex = "\xFF"; # 十六进制以 \x 开头,a,b,c,d,e,f 不区分大小写 # 定义浮点数 float1 = 10.0; float2 = 10.; float3 = 0.25; float4 = .25; float5 = -10.0e2; # -10.0乘以 10 的 2 次方,e不区分大小写};{};END { print int1; print int2; print int3; print octal; print hex; print float1; print float2; print float3; print float4; print float5;};
#! /usr/bin/awk -fBEGIN { # 定义字符串 # 注意字符串不能使用单引号定义 str1 = "Test1\tTest2"; # 字符串长度 printf("The length of str1: %s\n", length(str1)); # 转成小写 printf("The lower case of str1: %s\n", tolower(str1)); # 转成大写 printf("The upper case of str1: %s\n", toupper(str1)); # 查找子串位置 printf("The position of Test2 in str1: %s\n", index(str1, "Test2")); # 获取子串 printf("The sub string of str1: %s\n", substr(str1, 7, 4)); # 查找匹配 if(match(str1, "[a-zA-Z]+2") != 0) { print "find pattern in str1"; } # 替换 printf("After substituted str1: %s\n", gensub("[a-zA-Z]+2", "***", g, str1));};{};END {};
awk 支持如下转义字符。
\a 响铃\b 退格\f 换页\n 换行\r 回车\t 水平制表符\v 垂直制表符\ddd 8进制数字\xhex 16进制数字\\ 反斜线
awk 定义了以下内置变量,在适当的时候,我们可以引用或设置这些变量来得到我们想要的信息。
ARGC 命令行参数数量ARGV 命令行参数数组ARGIND 当前 ARGV 的下标ENVIRON 环境变量关联数组(ENVIRON["HOME"])IGNORECASE 是否忽略大小写FILENAME 当前处理的文件名FS 列分隔符,默认是空格RS 行分隔符,默认是换行符RT 行分隔符,Gawk 使用FIELDWIDTHS 用来生成定长文件NF 当前行的列数NR 当前处理过的行数FNR 当前文件的总行数CONVFMT 默认格式化数字的格式(%.6g)OFMT 默认数字输出格式(%.6g)OFS 输出文件列分隔符,默认是空格ORS 输出文件行分隔符,默认是换行符RSTART 调用 match 函数后, RSTART 保存匹配的位置RLENGTH 调用 match 函数后, RLENGTH 保存匹配字符串的长度ERRNO 保存错误消息BINMODE 二进制模式LINT 同参数 --lintPROCINFO 关联数组,保存当前运行脚本的有关信息,如获取进程号:PROCINFO["pid"]SUBSEP 分离多个下标,默认(\034)TEXTDOMAIN 用来本地转换
– 更多参见:
– 声 明:转载请注明出处 – Last Updated on 2015-10-28 – Written by ShangBo on 2015-10-27 – End