Awk notes

来源:互联网 发布:元数据与主数据区别 编辑:程序博客网 时间:2024/05/17 02:22

1. awk语言

awk是用来操作数据和产生报表的一种编程语言。
awk从第一行到最后一行逐行扫描一个文件,搜索与指定模式匹配的行,并对这些行执行选定的操作(操作封装在花括号里)。
awk指令包括模式、操作或模式和操作的组合。
awk模式控制awk对一行输入作什么样的操作;包括正则表达式,可以产生布尔值的表达式,或两者的结合。awk支持的正则表达式与egrep基本一致;也可以用 & >在替代串里表示搜索串里匹配到的字符串。
awk操作是封装在花括号里且由分号分隔的语句(语句如果在各自的行里,也可用换行符分隔)。awk支持print和printf格式化输出,其中printf格式化字符与C语言中的格式化字符其本一致。print提供换行符,printf不提供,换行时需要提供转义序列\n。

2. awk内置变量

内置变量名称大小,可以用在表达式里面,且可以被重置。

变量名 变量含义 ARGC 命令行变量个数 ARGV 命令行变量数组 FILENAME 当前输入的文件名 NF 当前记录的域个数 NR 到目前为止所有输入文件的记录数 FNR 到此为止当前文件的记录数 FS 输入域分割符,默认为一个空格。也可以在命令行通过 -F 选项指定输入域分割符 OFS 输出域分割符 RS 输入记录分割符 ORS 输出记录分割符 OFMT 数值输出格式;printf格式化输出时也可指定数值输出格式 SUBSEP 下标分割符,可用于实现多维数组 RLENGTH 由match函数匹配的串长度 RSTART 由match函数匹配的串偏移量

3. BEGIN,END模式

BEGIN模式后跟一个操作模块,在awk处理文件之前执行该模块。
BEGIN操作通常用来改变FS、RS、OFS等内置变量的值,或给用户自定义变量赋初值,把标题打印成输出的一部分等。
eg: awk 'BEGIN{FS=":"; OFS="\t"}{print $1,$2}' filename

END模式不与任何输入行匹配,只执行与END模式相关的操作。在awk将所有输入行处理完后,才会执行END模块。
eg: awk 'END{print "The number of records is " NR}' filename

4. awk内置函数

  • getline
    getline函数用来从标准输入、管道、或文件读输入,而不是从正被处理的当前文件。
    eg: awk 'BEGIN{"date" | getline dt; print dt}' filename
  • system
    system函数将一个shell命令当作它的变量,执行该命令,并把退出状态返回给awk。
  • sub和gsub
    sub函数把正则 表达式与记录里最大且最左边的字符串匹配,然后用替换串替换该字符串。sub将目标字符串(eg: $1)作为第三个参数,可选;如果没指定目标串,默认使用整条记录。
    gsub函数全局替换记录里正则表达式的每次匹配。 sub (regular expression, substitution string[, target string]) gsub (regulat expression, substitution string[, target string])
  • index
    index函数返回在一个字符串里找到子串的第一个位置,偏移量从1开始
    index (string, substring)
  • length
    length函数返回一个字符串的字符数;如果没有变量,就返回一条记录里的字符数。
    length [(string)]
  • substr
    substr函数返回从第一个位置开始的字符串的一个子串;这里第一个位置是1。 substr (string, starting position[, length of string])
  • match
    match函数返回字符串里找到正则表达式位置的索引;如果没找到,返回0。
    match函数将内置变量RSTART设置为子串的起始位置,设置RLENGTH为到子串末尾为止的字符数。
    match (string, regular expression)
  • split
    split函数把字符串划分为一个数组。split将域分割符作为第三个参数,可选;如果没提供,则默认使用当前FS值。
    split (string, array[, field separator])
  • sprintf
    sprintf函数以指定格式返回一个表达式,允许使用printf的格式说明。
  • int
    int函数舍去小数点后任何数位来创建一个整数。
  • rand
    rand函数产生一个大于或等于0且小于1的伪随机数。
  • srand
    srand没有参数,就用日期产生rand函数的种子;srand(x)将x作为种子。

<script type="text/javascript"><!--google_ad_client = "ca-pub-1944176156128447";/* cnblogs 首页横幅 */google_ad_slot = "5419468456";google_ad_width = 728;google_ad_height = 90;//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
原创粉丝点击