【译】 AWK教程指南 3计算并打印文件中指定的字段数据

  awk 处理数据时,它会自动从数据文件中一次读取一条记录,并会将该记录切分成一个个的字段;程序中可使用 $1, $2,... 直接取得各个字段的内容。这个特色让使用者易于用 awk 编写 reformatter 来改变数据格式。

 

范例:以数据文件 emp.dat 为例,计算每人应发工资并打印报表。

分析:awk 会自行一次读入一条记录,故程序中仅需告诉 awk 如何处理所读入的数据行。

  执行如下命令:($ 表UNIX命令行上的提示符)      

    $ awk '{ print $2, $3 * $4 }' emp.dat

  执行结果如下:

  屏幕出现:

         

说明:

  1. UNIX命令行上,执行awk的语法为:    

    $ awk  'awk程序'  要处理的数据文件名

    本范例中的 程序部分为 {print $2, $3 * $4}。把程序置于命令行时,程序之前后必须以 ' (单引号)括住。

  2. emp.dat 为指定给该程序处理的数据文件名。 

  3. 本程序中使用:Pattern { Actions } 语法。          

Pattern Actions
  print $2, $3 * $4
    
  Pattern 部分被省略,表示无任何限制条件。故awk读入每行数据后都将无条件执行这个 Actions。

  4. print为 awk 所提供的输出指令,会将数据输出到stdout(屏幕)。print 的参数间彼此以 "," (逗号) 隔开,打印出数据时彼此间会以空白隔开。(参考 附录 D 内置变量OFS)

  5. 将上述的 程序部分 储存于文件 pay1.awk 中,执行命令时再指定 awk程序文件 的文件名。这是执行awk的另一种方式,特别适用于程序较大的情况,其语法如下:    

    $ awk -f awk程序文件名 数据文件名

  故执行下列两命令,将产生同样的结果。

    $ awk -f pay1.awk emp.dat  
    $ awk '{ print $2, $3 * $4 }' emp.dat

  读者可使用 "-f" 参数,让awk主程序使用“其它 仅含 awk函数 的程序文件中的函数 ”

  其语法如下:  

    $ awk -f awk主程序文件名 -f awk函数文件名 数据文件名

  (有关 awk 中函数的声明与使用于 7.4 中说明)

  6. awk中也提供与 C 语言中类似用法的 printf() 函数,使用该函数可进一步控制数据的输出格式。

  编辑另一个awk程序如下,并取名为 pay2.awk 

    { printf("%6s Work hours: %3d Pay: %5d\n", $2, $3, $3 * $4) }

  执行下列命令 

    $ awk -f pay2.awk emp.dat

  执行结果屏幕出现:

        

posted @ 2013-11-21 19:52  阿杰的专栏  阅读(323)  评论(0编辑  收藏  举报