awk language 1

##awk language 1

####Getting Started 开始使用第一条awk命令
假设你有如下几行数据(name, salary, wordHour),默认是以空格分割字段的(后续会讲学习分隔符-F),现在希望打印出工作时长大于0的所有人。

![这里写图片描述](https://img-blog.csdn.net/20180826091911855?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0YyMjkzMzg1OTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)

执行 awk ’ $3 > 0 { print $0 } ’ uniq.txt

![这里写图片描述](https://img-blog.csdn.net/20180826091934326?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0YyMjkzMzg1OTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)

好了,你已经学会了第一条awk命令,并得到自己想要的东西。

####The Structure of an AWK Program

这个命令是按行读取文件,一行一行的读,逐行读取并匹配自定义的pattern。
awk命令可以包含多个patter-action。
下面举几个例子:

  1. ‘$3==0 {print $0}’ uniq.txt
![这里写图片描述](https://img-blog.csdn.net/20180826092018623?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0YyMjkzMzg1OTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70) 2. '\$3==0' uniq.txt
![这里写图片描述](https://img-blog.csdn.net/20180826092029273?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0YyMjkzMzg1OTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70) 3. ‘\{print $0}’ uniq.txt
![这里写图片描述](https://img-blog.csdn.net/20180826092049665?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0YyMjkzMzg1OTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)

   例子2和3说明有时好模式和行为会缺失,但是不影响结果的输出。

  1. ‘{last=$0} END{print last }’ uniq.txt
![这里写图片描述](https://img-blog.csdn.net/20180826092108481?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0YyMjkzMzg1OTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)

   这就是多个patter-action 。

小结:
    引号之内的语句就是完整的awk程序. awk语句包含模式(pattern,即匹配条件)、行为(action,就是匹配完成后动作)、然后就是输入文件。一般的awk 命令包含这几个部分,但也有其他变形,后续会提到。‘{}’ 大括号内的是action行为 ; ‘’ 引号内的不在’’{}’ 是模式。

####Running an AWK Program

  1. 基本语法(完整的结构)
![这里写图片描述](https://img-blog.csdn.net/20180826092140318?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0YyMjkzMzg1OTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)

      awk ‘{print $0}’ uniq.txt uniq.txt_1

![这里写图片描述](https://img-blog.csdn.net/201808260922050?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0YyMjkzMzg1OTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)

    【注意】最后一个参数是一个files ,意思就是可以多个文件为输入
   2. 其他输入

![这里写图片描述](https://img-blog.csdn.net/20180826092410978?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0YyMjkzMzg1OTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)![这里写图片描述](https://img-blog.csdn.net/2018082609514793?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0YyMjkzMzg1OTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)

    【注意】In this case awk will apply the program to whatever you type next on your terminal until you type an end-of-file signal. 此时输入就是从控制台输入数据

  1. 执行一个文件中的命令
![这里写图片描述](https://img-blog.csdn.net/20180826092436651?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0YyMjkzMzg1OTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)

    The -f option instructs awk to fetch the program from the named file. Any filename can be used in place of progfile.

####Simple Output

  1. 打印没一行
    {print } 或者 {print $0}

  2. 打印制定的列
    {print $1 , $3}

  3. NF, the Number of Fields.
    Awk counts the number of fields in the current input line and stores the count in a built-in vari- able called NF.

![这里写图片描述](https://img-blog.csdn.net/20180826093248452?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0YyMjkzMzg1OTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
  1. 计算
    {print $1, $2 * $3}
  2. 打印每行的行号
  3. awk ‘{print NR, $0}’ uniq.txt
![这里写图片描述](https://img-blog.csdn.net/20180826093455724?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0YyMjkzMzg1OTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)

####Fancier Output

  1. 字符串拼接
![这里写图片描述](https://img-blog.csdn.net/20180826093606280?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0YyMjkzMzg1OTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
  1. 格式化输出
![这里写图片描述](https://img-blog.csdn.net/20180826093631495?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0YyMjkzMzg1OTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)

      { printf(“total pay for %s is $ %.2f\n”, $1, $2*$3) } uniq.txt

![这里写图片描述](https://img-blog.csdn.net/20180826093714587?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0YyMjkzMzg1OTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)

      awk ‘{ printf("’’’%d’’’:total pay for %s is $%.2f\n", NR, $1, $2)}’ uniq.txt

![这里写图片描述](https://img-blog.csdn.net/20180826093728134?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0YyMjkzMzg1OTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)

      注意:特殊字符需要转义,如上

      awk ‘{ printf("%6.2f %s\n", $2 * $3, $0) }’ uniq.txt|sort -n -k3。对第三列排序

![这里写图片描述](https://img-blog.csdn.net/20180826093752825?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0YyMjkzMzg1OTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
selection 条件筛选
  1. 基本判断 == , >, 等等
  2. 或 $2 >0 || $3 >1 ; 且 $1>0 && $2>0
BEGIN 和 END的用法

    awk ‘BEGIN {print “name rate hours” ;print “”} {print }’ uniq.txt

![这里写图片描述](https://img-blog.csdn.net/20180826093937835?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0YyMjkzMzg1OTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
  1. 此处说明了awk 可以执行多个pattern -action. 可以只有action 无pattern.
  2. print “” 是打印了一个空行;print 打印每一行
控制流语句
  1. IF-ELSE
    awk -f awk.log uniq.txt
    这里写图片描述
    这里写图片描述

  2. WHILE
    awk -f awk.log # 此处换行
    1000 0.5 3

![这里写图片描述](https://img-blog.csdn.net/20180826094103951?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0YyMjkzMzg1OTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
![这里写图片描述](https://img-blog.csdn.net/20180826094135197?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0YyMjkzMzg1OTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
  1. 数组的使用
      awk -f awk.log uniq.txt
![这里写图片描述](https://img-blog.csdn.net/20180826094156630?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0YyMjkzMzg1OTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
![这里写图片描述](https://img-blog.csdn.net/20180826094214110?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0YyMjkzMzg1OTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值