AWK快速入门

1. AWK程序结构

创建一个文件名为emp.data的文件,用vim编辑如下内容
Beth 4.00 0
Dan 3.75 0
Kathy 4.00 10
Mark 5.00 20
Mary 5.50 22
Susie 4.25 18

每列分别为名字,时薪,工时。
如果想打印每个雇员的名字和他们的薪酬

[~]awk '$3>0{print$1,$2*$3}' emp.data
Kathy 40
Mark 100
Mary 121
Susie 76.5

这个命令会告诉操作系统运行AWK程序,被运行的程序用单引号包围,从输入文件emp.data获取数据。被单引号包围的部分是一个完整是awk程序,它由一个单独的模式-动作语句(pattern-action)组成。模式$3>0匹配每一行输入,如果该行的第三列(或者说字段(filed)大于0),则动作
   {print $1,$2*$3}
显示第1列名字及第2列和第3列的乘积。

如果你想看哪个员工在偷懒,可以执行awk程序awk'$3==0 print{$1}' emp.data
awk的模式与动作可以省略其一,但不能两者都省略,如果一个模式没有动作,例如:

awk '$3==0' emp.data

会将每一个匹配行打印出来。这个程序将我呢件emp.data中第3个字段为0的两行打印出来:

Beth     4.00     0
Dan      3.75     0

如果只有动作没有模式,例如

awk '{print $1}' emp.data

Beth
Dan
Kathy
Mark
Mary
Susie

对于每一个输入行,动作(这个例子里是打印第一个字段)都会被执行。

    因为模式和动作都是可选的所以用花括号将动作括起来,以便区分两者。

2.运行AWK程序

运行awk程序有多种方式,举几个例子:
    awk ‘program’ inputfile
这个命令对指定的输入文件的每一行,执行program.
Ex:
    awk '$3==0 {print $1}' file1 file2
打印文件file1和file2de 每一行的第一个字段(条件是该行的第3个字段为0)
另外你也可以在命令行上省略输入文件,
   awk '$3==0 {print $1}' 这种情况下,awk会将program应用到你接下来在终端输入的内容上面,知道你键入一个文件结束标志(Unix系统组合键control-d)
Ex:

awk '$3==0 {print $1}'

Beth 4.00 0
Beth

这种行为对测试awk程序来说非常方便:键入程序与数据,检查程序的输出。
当程序的长度比较短时(只有几行)吗,这种安排会比较方便。如果程序比较长,更好的做法是将它们放在一个单独的文件中,如果文件名师profile的话,运行时只要键入
awk -f profile optionallist of files

选项-f告诉awk从文件中提取程序,在profile出现的地方可以是任意的文件名。

3.错误

    如果你在awk程序犯了一个错误,awk会显示一个诊断信息。例如,你打错了一个花括号,就像这样

awk '$3==0 [print $1 }' emp.data
错误告警如下:
这里写图片描述

   ”Syntax error”意味着你犯了一个语法错误,错误的地方会备用>>> <<<标记。“Bailing out”意味着无法修复。

   由于发生了语法错误,awk不会尝试执行这个程序,然后有写错误知道运行时才会被检测到。例如,你的程序尝试用0作除数,这时候awk会停止处理,然后报告错误所在位置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值