您的位置:首页 > 运维架构 > Shell

shell之awk的编程结构--BEGIN/END/重定向/管道

2016-07-26 16:06 465 查看
 1.BEGIN模块:这个模块包括了一个操作块(也就是"{ }"内的内容)。该操作块是在文件输入之前执行的,也就是不需要输入任何文件数据,也能执行该模块。
          BEGIN模块常用于设置修改内置变量如(OFS,RS,FS等),为用户自定义的变量赋初始值或者打印标题信息等。
         BEGIN模块中的语句操作以“;”标志或者分行隔开。
         eg:awk  'BEGIN{print "Hello World! Begin doing!"}'   #输出字符串
    
    2. END模块:与BEGIN模块相反,是处理完文件后的操作。不匹配任何输入行,常用于输出一些总结信息。
         awk  '/mary/{count++}END{print "mary was found " count "times."}'   file1
         #输出找到“mary”的次数
   
    总结一下:awk基本结构为 : BEGIN{BEGIN操作}
 {文件行处理块}  END{END操作 }

 
    3.重定向:
              输出重定向:awk的输出重定向操作符与shell的输出重定向操作符相同。
                         注意:重定向的目标文件必须用双引号括起来。
                                     目标文件打开就一直保持打开状态直到 显式关闭或者awk程序终止。
                   >    覆盖目标文件内容
                   >>   追加到目标文件后面
                   awk  '$4>=70{print $1,$2 >"tmpfile"}' file1
               输入重定向:使用getline函数,该函数用于从标准输入、管道或者文件(非当前处理的文                                          件)读取输入。
                           注意:如果文件不存在,getline的值是-1,读到文件尾则返回0,读到行返回1。
                       awk  'BEGIN{"date" | getline  d; print d}'  file1
                       awk  'BEGIN{while(getline < "/etc/passwd" >0) lc++; print lc}' file
                       #读取/etc/passwd的行数 

      4. 管道:如果在awk中打开了管道命令,就必须先关闭它才能打开另一个管道。管道右边的命令必须括在双引号之间。awk中每次只能打开一个管道。
                        awk '{print $1,$2 |"sort -r +1 -2 +0 -1"}' file1

       5.显式关闭文件和管道:如果awk程序打算再次使用某个文件或者再打开一个管道进行读写时,可能会显示无效。这个主要用于不影响EDN模块中的文件操作和管道命令。
           (In script)
             { print $1,$2,$3 | "sort -r +1 -2 +0 -1"}
              END{
                     close("sort -r +1 -2 +0 -1")
            注意:关闭的管道命令必须与打开时的一模一样。

        6.system函数:用于在awk中运行shell脚本或命令
                 awk  ‘BEGIN{ system("clear")}'    #运行shell的清屏命令clear
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: