Chinaunix首页 | 论坛 | 博客
  • 博客访问: 147660
  • 博文数量: 27
  • 博客积分: 531
  • 博客等级: 一等列兵
  • 技术积分: 332
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-25 18:31
文章分类

全部博文(27)

文章存档

2015年(4)

2014年(3)

2013年(6)

2012年(14)

我的朋友

分类: LINUX

2012-06-17 20:14:28

        Unix/Linux 文本处理工具的一般选择流程:shell->awk->c/c++。在这里简单的介绍一下awk的基本感念和使用方式,算是入门简介。
       awk的不同使用方式:
              1. 命令行方式
              2. -f参数方式,即将一段awk程序写入文件中
              3. 利用命令解释器调用,#!/bin/awk -f (文件)

       awk语法:
              awk [-F re] [parameter...] ['prog'] [-f progfile] [in-file...]
                      1. -F re 允许awk更改其字段分割符
                      2. parameter 为不同的变量赋值
                      3. 'prog' awk的程序语段,必须被单引号括起来,防止被shell解释,这个语句的标准形式:'pattern{action}',其中,action由一系列awk语句组成,之间以 ';' 分割。awk解释他们,并将于pattern相符的记录进行操作,可以省略pattern或action,但是不能两者都省略。省略action表示将合适的记录输出到stdout;省略pattern匹配所有行。
                      4. -f progfile awk执行指定的文件,它符合awk的语法。
                      5. in-file awk的输入文件,awk允许对多个文件进行处理,未指定时认为是stdin

        awk的记录、字段于内置变量:
               awk支持对记录和字段进行处理,对字段的处理是grep和sed所不具备的。缺省情况下,一个记录即为一个文件的一行,一行中的某一个部分为记录中的一个字段。以$1 $2 $3...等顺序表示,$0表示整行。
               字段默认的分割符是空格。以 -F re改变分割符,awk内部使用FS变量记录分割符。
               eg: $awk -F % 'NR==7, NR==15{print $1$3$7}' myfile // 打印出myfile中7到15行的指定字段,以%分割的。
         
        awk内置函数:
               eg:printf 其使用方式和c语言的printf相似。
                       $awk '{printf "%03d %s\n", NR, $1}' myfile // 输出文件的行号和第三字段
        
        一些使用方式:
               1. $awk '/sun/{print}' myfile // 显示myfile中含 sun 的行。
               2. $awk '/[Ss]|un/, [Mm]oon/{print}' mydoc // 显示第一个与sun或者Sun匹配的行 与 Moon 或者moon匹配的行之间的行。
               3. $awk 'length ($0)>80{print NR}' mfile // 其中,length为内置函数,NR表示行号

         awk变量:
                内置变量的引用不使用 $,而自定义的变量使用 $

         awk控制流程:
                1. 任何在BEGIN之后的操作(在{}中),将在awk开始扫描输入前完成执行。
                2. 任何在END之后的操作(在{}中),将在awk完成所有的扫描之后执行。
                eg:$awk
                        >BEGIN {FS=":"; print "统计总额"; total=0}
                        >{print $3; total+$3}
                        >END{printf "总额: %.2f", total} infile

         程序控制语句:
                if/else
                if(表达式)
                    语句
                else
                    语句

                while(表达式)
                    语句

                do
                { 语句 } while(表达式)
 
                for(初值; 终止条件; 步长)
                { 语句 }

                循环中可使用 continue 或者 break
        
         几个重要的内置变量:
                FNR:当前记录数
                NF:当前记录的字段
                NR:以读出的记录数
                FS:分割符

         以上只是对awk极其简单的介绍,做为入门的参考。后续在使用过程中有深入的研究再做续篇!
阅读(1514) | 评论(0) | 转发(0) |
0

上一篇:linux文件系统理解

下一篇:astyle 使用脚本

给主人留下些什么吧!~~