手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>网站运营>建站经验>列表

awk man手册

来源:互联网 作者:west263.com 时间:2008-04-16
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!

  • awk 能够在命令行中给变量赋值,然后将这个变量传输给awk脚本。如$ awk -F: -f awkscript month=4 year=2004 test,上式的month和year都是自定义变量,分别被赋值为4和2004。在awk脚本中,这些变量使用起来就象是在脚本中建立的相同。注意,假如参数前面出现test,那么在BEGIN语句中的变量就不能被使用。
  • 域变量也可被赋值和修改,如$ awk '{$2 = 100 $1; print }' test,上式表示,假如第二个域不存在,awk将计算表达式100加$1的值,并将其赋值给$2,假如第二个域存在,则用表达式的值覆盖$2原来的值。再例如:$ awk '$1 == "root"{$1 ="test";print}' test,假如第一个域的值是“root”,则把他赋值为“test”,注意,字符串一定要用双引号。
  • 内建变量的使用。变量列表在前面已列出,现在举个例子说明一下。$ awk -F: '{IGNORECASE=1; $1 == "MARY"{print NR,$1,$2,$NF}'test,把IGNORECASE设为1代表忽略大小写,打印第一个域是mary的记录数、第一个域、第二个域和最后一个域。
    14.2. BEGIN模块
    BEGIN 模块后紧跟着动作块,这个动作块在awk处理任何输入文档之前执行。所以他能够在没有任何输入的情况下进行测试。他通常用来改变内建变量的值,如OFS, RS和FS等,连同打印标题。如:$ awk 'BEGIN{FS=":"; OFS="\t"; ORS="\n\n"}{print $1,$2,$3} test。上式表示,在处理输入文档以前,域分隔符(FS)被设为冒号,输出文档分隔符(OFS)被配置为制表符,输出记录分隔符(ORS)被配置为两个换行符。$ awk 'BEGIN{print "TITLE TEST"}只打印标题。
    14.3. END模块
    END不匹配任何的输入文档,但是执行动作块中的任何动作,他在整个输入文档处理完成后被执行。如$ awk 'END{print "The number of records is" NR}' test,上式将打印任何被处理的记录数。
    14.4. 重定向和管道
  • awk 可使用shell的重定向符进行重定向输出,如:$ awk '$1 = 100 {print $1 > "output_file" }' test。上式表示假如第一个域的值等于100,则把他输出到output_file中。也能够用>>来重定向输出,但不清空文档,只做追加操作。
  • 输出重定向需用到getline函数。getline从标准输入、管道或当前正在处理的文档之外的其他输入文档获得输入。他负责从输入获得下一行的内容,并给NF,NR和FNR等内建变量赋值。假如得到一条记录,getline函数返回1,假如到达文档的末尾就返回0,假如出现错误,例如打开文档失败,就返回-1。如:
    $ awk 'BEGIN{ "date" | getline d; print d}' test。执行linux的date命令,并通过管道输出给getline,然后再把输出赋值给自定义变量d,并打印他。
    $ awk 'BEGIN{"date" | getline d; split(d,mon); print mon[2]}' test。执行shell的date命令,并通过管道输出给getline,然后getline从管道中读取并将输入赋值给d,split函数把变量d转化成数组mon,然后打印数组mon的第二个元素。
    $ awk 'BEGIN{while( "ls" | getline) print}',命令ls的输出传递给geline作为输入,循环使getline从ls的输出中读取一行,并把他打印到屏幕。这里没有输入文档,因为 BEGIN块在打开输入文档前执行,所以能够忽略输入文档。
    $ awk 'BEGIN{printf "What is your name?"; getline name
    $ awk 'BEGIN{while (getline 0) lc ; print lc}'。awk将逐行读取文档/etc/passwd的内容,在到达文档末尾前,计数器lc一直增加,当到末尾时,打印lc的值。注意,假如文档不存在,getline返回-1,假如到达文档的末尾就返回0,假如读到一行,就返回1,所以命令 while (getline
  • 能够在awk中打开一个管道,且同一时刻只能有一个管道存在。通过close()可关闭管道。如:$ awk '{print $1, $2 | "sort" }' test END {close("sort")}。awd把print语句的输出通过管道作为linux命令sort的输入,END块执行关闭管道操作。
  • system函数能够在awk中执行linux的命令。如:$ awk 'BEGIN{system("clear")'。
  • fflush函数用以刷新输出缓冲区,假如没有参数,就刷新标准输出的缓冲区,假如以空字符串为参数,如fflush(""),则刷新任何文档和管道的输出缓冲区。
    14.5. 条件语句
    awk中的条件语句是从C语言中借鉴过来的,可控制程式的流程。
    14.5.1. if语句格式:
    {if (expression){
    statement; statement; ...
    }
    }
    $ awk '{if ($1
    $ awk '{if ($1
    14.5.2. if/else语句,用于双重判断。格式:
    {if (expression){
    statement; statement; ...
    }
    else{
    statement; statement; ...
    }
    }
    $ awk '{if ($1 > 100) print $1 "bad" ; else print "ok"}' test。假如$1大于100则打印$1 bad,否则打印ok。
    $ awk '{if ($1 > 100){ count ; print $1} else {count--; print $2}' test。假如$1大于100,则count加一,并打印$1,否则count减一,并打印$1。
    14.5.3. if/else else if语句,用于多重判断。格式:
    {if (expression){
    statement; statement; ...
    }
    else if (expression){
    statement; statement; ...
    }
    else if (expression){
    statement; statement; ...
    }
    else {
    statement; statement; ...
    }
    }
    14.6. 循环
  • awk有三种循环:while循环;for循环;special for循环。
  • $ awk '{ i = 1; while ( i
  • $ awk '{for (i = 1; i
  • breadkcontinue语句。break用于在满足条件的情况下跳出循环;continue用于在满足条件的情况下忽略后面的语句,直接返回循环的顶端。如:{for ( x=3; x

    文章整理:西部数码--专业提供域名注册虚拟主机服务
    http://www.west263.com
    以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!