Awk是一种便于使用且表达能力强的程序设计语言,可应用于各种计算和数据处理任务
1.1起步
加入我们现在有一个文件 文件名emp.txt 里面存放的是员工的每小时的薪资 每个员工单独占一行 如下所示
Beth 4.00 0
Dan 3.75 0
kathy 4.00 10
Mark 5.00 20
Mary 5.50 22
Susie 4.25 18
现在你想打印出工作时间超过零小时的员工的姓名和工资(薪资乘以时间)。
使用命令及输出内容
[root@ localhost ~]# awk '$3 >0 { print $1,$2 * $3}' emp.txt
kathy 40
Mark 100
Mary 121
Susie 76.5
命令讲解:$ > 3 是我们的判断条件 { print $1,$2 * $3 } 这个是我们想要输出的内容 包括员工的名字以及工资 emp.txt 是我们要读取的文件名字
打印工作时间等于0 个小时的工作人员
使用命令 及输出结果
[root@ localhost ~]# awk '$3 == 0 { print $1 }' emp.txt
Beth
Dan
打印名字叫kathy 并且工作小时大于0 的名字 和薪资总和
比如
[root@ localhost ~]# awk '$3==0' emp.txt
Beth 4.00 0
Dan 3.75 0
1.2简单输出
打印每一行
如果一个动作没有任何模式 ,这个动作会对搜友输入的行进行操作,print语句用来输出当前输入的行
[root@ localhost ~]# awk '{print}' emp.txt
Beth 4.00 0
Dan 3.75 0
kathy 4.00 10
Mark 5.00 20
Mary 5.50 22
Susie 4.25 18
输出所有输入的内容到标准输出由 $0表示整行
[root@ localhost ~]# awk '{print $0}' emp.txt
Beth 4.00 0
Dan 3.75 0
kathy 4.00 10
Mark 5.00 20
Mary 5.50 22
Susie 4.25 18
打印特定字段
[root@ localhost ~]# awk '{print $1,$3}' emp.txt
Beth 0
Dan 0
kathy 10
Mark 20
Mary 22
Susie 18
在print语句种被逗号分隔的表达式,在默认情况下 他们会将用一个空格分割来输出,每一行print生成的内容都会以一个换行字符作为结束,但这些默认行为都可以自定义。
NF,字段数量
依次打印出每一行的字段数量,第一个字段数量,最后一个字段的值:
[root@ localhost ~]# awk '{print NF,$1,$NF}' emp.txt
3 Beth 0
3 Dan 0
3 kathy 10
3 Mark 20
3 Mary 22
3 Susie 18
计算和打印
打印出姓名和员工的合计支出(以小时计算)
[root@ localhost ~]# awk '{print $1,$2*$3}' emp.txt
Beth 0
Dan 0
kathy 40
Mark 100
Mary 121
Susie 76.5
打印行号
AWK提供了一个内建变量,叫做NR,它会存储当前已经读取了多少行的计数,我们可以使用NR和$0给文件每一行加上行号
[root@ localhost ~]# awk '{print NR,$0}' emp.txt
1 Beth 4.00 0
2 Dan 3.75 0
3 kathy 4.00 10
4 Mark 5.00 20
5 Mary 5.50 22
6 Susie 4.25 18
在输出中添加内容
当然也可以在字段中间或者计算的值中间打印输出想要的内容:
[root@ localhost ~]# awk '{print "total pay for",$1,"is",$2*$3}' emp.txt
total pay for Beth is 0
total pay for Dan is 0
total pay for kathy is 40
total pay for Mark is 100
total pay for Mary