关闭

awk 变量

867人阅读 评论(0) 收藏 举报
分类:

– Start
awk 是一种弱类型的语言,它并不像 Java 等其他语言那样严格区分数字和字符串。那 awk 是如何来识别一个变量中存储的是数字还是字符串的呢?答案就是操作符。操作符需要什么类型的数据,变量就会被转换成什么类型的数据。如果对两个变量进行数学运算,那么不管这两个变量中存储的是什么,它们都将被转换为数字。如果字符串中包含的不是数字,它将会被转换成 0。此外,变量也不需要提前申明,变量名区分大小写。

数字变量

#! /usr/bin/awk -f

BEGIN {
    # 定义整数
    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 -f

BEGIN {
    # 定义字符串
    # 注意字符串不能使用单引号定义
    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        同参数 --lint
PROCINFO    关联数组,保存当前运行脚本的有关信息,如获取进程号:PROCINFO["pid"]
SUBSEP      分离多个下标,默认(\034)
TEXTDOMAIN  用来本地转换

– 更多参见:awk 精萃
– 声 明:转载请注明出处
– Last Updated on 2015-10-28
– Written by ShangBo on 2015-10-27
– End

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:809869次
    • 积分:12000
    • 等级:
    • 排名:第1216名
    • 原创:443篇
    • 转载:1篇
    • 译文:0篇
    • 评论:104条
    文章分类
    最新评论