服务器 频道

AWK :Linux 管理员的智能工具包(下)

  BEGIN END

  使用 BEGIN 和 END 语句可以分别指定在处理实际开始之前或者完成之后进行操作。 BEGIN 语句最常用于建立变量或显示标题。另一方面, END 语句可用于在程序结束后继续进行处理。

  在前面的示例中,利用以下例程生成了物品的总价值:

  awk ''{x=x+($2*$3)} {print x}'' inventory

  该例程在运行总计累加时显示了文件中的每一行。没有其他方法可以指定它,而不让在每一行进行打印也导致它始终不打印出来。但是,利用 END 语句可以避免这一问题:

  $ awk ''{x=x+($2*$3)} END {print "Total Value of Inventory:"x}'' inventory

  Total Value of Inventory: 2241.66

  $

  定义了变量 x ,它对每一行进行处理;但是,在所有处理完成之前不会生成显示。尽管可以作为独立例程使用,它也可以置入到先前的代码列表,添加更多信息并生成更完整的报表:

  $ awk ''{x=x+($2*$3)} {print $1,"QTY: "$2,"PRICE:

  "$3,"TOTAL: "$2*$3} END {print "Total Value of Inventory: " x}'' inventory

  hammers QTY: 5 PRICE: 7.99 TOTAL: 39.95

  drills QTY: 2 PRICE: 29.99 TOTAL: 59.98

  punches QTY: 7 PRICE: 3.59 TOTAL: 25.13

  drifts QTY: 2 PRICE: 4.09 TOTAL: 8.18

  bits QTY: 55 PRICE: 1.19 TOTAL: 65.45

  saws QTY: 123 PRICE: 14.99 TOTAL: 1843.77

  nails QTY: 800 PRICE: .19 TOTAL: 152

  screws QTY: 80 PRICE: .29 TOTAL: 23.2

  brads QTY: 100 PRICE: .24 TOTAL: 24

  Total Value of Inventory: 2241.66

  $

  BEGIN 命令与 END 的工作方式相同,但它建立了那些需要在完成其他工作之前所做的项目。该过程最常见的目的是创建报表的标题。此例程的语法类似于

  $ awk ''BEGIN {print "ITEM QUANTITY PRICE TOTAL"}''

0
相关文章