今天主要介绍下awk中内置的String函数和awk中内置的变量。

awk中内置的string函数

  • index(in, find): 在 string “in”中查找 find 的第一次出现位置,返回的find在in中第一个字符出现的位置,从1开始
    awk 'BEGIN { print index("peanut", "an") }'
    # 打印3
    
  • length(string) : 返回字符串的长度,如果是number类型,返回对应字符的长度
  • match(string, regexp) : 正则匹配regexp的规则,如果匹配,则返回对应第一个字符的位置
  • split(string, array, fieldsep) : 按照fieldsep分割字符串,并将结果放置到array中,array的下标从1开始
    split("yaronspace.cn", fields, ".")
    # fields[1] = "yaronspace"
    # fields[2] = "cn"
    
  • sprintf(format, expression1, …): 格式化字符串
  • sub(regexp, replacement, target): 将第一个匹配的regexp的部分使用replacement替代,替代后的结果还是保存在target变量中。所以target必须是变量,不可为字符常量
    str = "yaronspace.cn";
    sub(/yaronspace/, "xiaofangdeng", str);
    # str="xiaofengdeng.cn"
    

    使用&符号引用匹配regexp部分的字符长,示例如下:

    str = "yaronspace.cn";
    sub(/yaronspace/, "&_xiaofangdeng", str);
    # str = "yaronspace_xiaofangdeng.cn"
    
  • gsub(regexp, replacement, target):  与sub功能类似,但是会替换所有匹配regexp的子串,g代表”global”的含义
  • substr(string, start, length) : 获取子串
  • tolower(string) : 转化为小写
  • toupper(string) : 转化为大写

awk中内置的变量

  • FS: Input Field Seperator variable: 对每行记录的分割符,可以通过-F参数修改,或者在awk文件中,直接使用FS=”XX”进行修改
  • OFS : Output Field Seperator variabble: 输出时默认每个记录的分隔符,默认为空格
    $ awk -F':' '{print $3,$4;}' /etc/passwd   # $3 $4以空格分割
    $ awk -F':' 'BEGIN{OFS="_"} {print $3, $4}' # 此时$3 $4是以_分割
    
  • RS : Input Record Seperator variable: 记录的默认分隔符,默认为\n换行符
    可以修改,如将其修改为\n\n,以两个空行为分隔符
  • ORS: Ouput Record Seperator variable: 默认的记录的输出的分隔符,默认为\n
  • NR: Number of records variable: 当前已读取记录数,默认情况为当前的行数
  • NF: Number of fields vairable : 当前记录的域的个数
  • FILENAME : Name of the current input file
  • FNR: Number of Records relative to the current input file : 当awk的输入文件只有一个时,NR == FNR;当awk的输入文件时多个时,FNR是当前文件的当前行数,NR是全局的行数

参考文章:

1. http://www.staff.science.uu.nl/~oostr102/docs/nawk/nawk_92.html

2. http://www.thegeekstuff.com/2010/01/8-powerful-awk-built-in-variables-fs-ofs-rs-ors-nr-nf-filename-fnr/

来自yaronspace.cn  本文链接:http://yaronspace.cn/blog/archives/1641