awk print 学习

 

 

Awk是一种处理结构数据并输出格式化结果的编程语言, Awk 是其作者 "Aho,Weinberger,Kernighan" 的简称。

Awk通常被用来进行格式扫描和处理。通过扫描一个或多个文件中的行,查看是否匹配指定的正则表达式,并执行相关的操作。

Awk的主要特性包含:

1. Awk以记录和字段的方式来查看文本文件

2. 和其他编程语言一样,Awk 包含变量、条件和循环

3. Awk能够进行运算和字符串操作

4. Awk能够生成格式化的报表数据

Awk从一个文件或者标准输入中读取数据,并输出结果到标准输出中。

1.  Awk的语法

 

在上诉语法中:

1. search pattern是正则表达式

2. Actions 输出的语法

3. 在Awk 中可以存在多个正则表达式和多个输出定义

4. file 输入文件名

5. 单引号的作用是包裹起来防止shell 截断

 

2.  Awk的工作方式:

1) Awk 一次读取文件中的一行

2)对于一行,按照给定的正则表达式的顺序进行匹配,如果匹配则执行对应的 Action

3)如果没有匹配上则不执行任何动作

4)在上诉的语法中, Search Pattern 和 Action 是可选的,但是必须提供其中一个

5)如果 Search Pattern 未提供,则对所有的输入行执行 Action 操作

6)如果 Action 未提供,则默认打印出该行的数据

7) {} 这种 Action 不做任何事情,和未提供的 Action 的工作方式不一样

8) Action 中的语句应该使用分号分隔

创建一个包含下面内容的文本文件employee.txt 。后续的例子中将会用到该文件

 

 

 

3.  Awk 的默认行为

默认的时候awk 打印文件中的每一行

 

 

在上面的例子中,匹配的正则表达式未给出,因此后续的Action 适用所有的行, Action 中的 print 没有任何参数的情况下将打印整行,注意其中的 Action 必须使用 {} 括起来。

4.  Awk打印匹配的行

 

 

 

在上面的例子中,将打印包含Thomas 和 Nisha 的行,上面的列子包含两个正则表达式。 Awk 可以接受任意数量的正则表达式,但是每个组合 ( 正则表达式和对应的 Action) 必须用新行来分隔。

5.  Awk仅打印指定的域

Awk包含许多内建的变量,对于每行的记录, Awk 默认按照空格进行分割,并将分隔后的值存入对应的 $n 变量中。如果一行还有 4 个单词,将被分别存储进 $1 $2 $3 $4 中,其中 $0 代表整行。 NF 也是一个内建的变量,代表该行中分割后的变量数。

 
     

    在上诉例子中$2 和 $5 分别代表名字和薪水,也可以使用 $NF 获得薪水,其中 $NF 代表最后一个字段,在打印语句中逗号是一个连接符号。

    6.  Awk开始和最后的动作

    Awk包含两个重要的关键字 BEGIN 和 END

     

     

     

    在BEGIN 节中的 Actions 会在读取文件中的行之前被执行。

    而END 节中的 Actions 会在读取并处理文件中的所有行后被执行。

     

     

     

    上述的例子为输出结果增加头和尾描述

    7.  Awk找出员工 ID 大于 200 的员工

     

     

     

    在上述例子中,$1 代表员工 ID ,如果员工 ID 大于 200 则执行默认的打印整行的 Action 。

    8.  Awk打印技术部员工

    $4代表员工所在的部门,如果等于 Technology 则打印出整行

     

     

     

    ~操作符是和正则表达式中的值进行比较,如果匹配则打印整行

    9.  Awk打印技术部门的员工数

    在下面的例子中,检查员工的部门是否是Technology ,如果是则递增 count 变量的值。 Count 变量的值在BEGIN 的 Actions 中被初始化为 0 。

     

     

     

    在处理的最后(END 的 Actions) ,仅仅打印出 Technology 部门的人数

     

     

    • 5
      点赞
    • 23
      收藏
      觉得还不错? 一键收藏
    • 13
      评论

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

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

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值