什么是awk

    awk 是一门解释型的编程语言,支持条件判断,数组、循环等功能。可用于文本处理、输出格式化的文本信息、执行数学运算、字符串等操作。

    awk在处理文件时按进行逐行处理,即每次处理输入的一整行,完成后再处理下一行,如此循环直到全部处理完毕,默认以换行符作为一行的终结。而在一行中又默认使用空格做为每一列的分隔符,将一行分割为多列。如下所示:

$0:代表输入的一整行
$1~$n:代表一行被分割后的列序号,$1则代表为第一列,依次类推

工作原理

  • 第一步

      awk读取一条记录作为输入,并将这条记录传递给内部变量 $0
  • 第二步

      记录被分隔符分割成多个字段,每一个字段被存储到指定编号的变量中,从 $1 开始。可使用 -F 指定分隔符,awk默认分隔符为空格
  • 第三步

      对于每一条记录,按照给定的pattern进行匹配,匹配成功则执行对应的action,匹配失败,则不执行action。
  • 第四步

      重复第1~3步直到结束

基本语法

awk [options] 'Pattern { Action }' File

常用选项

常用选项如下所示:

选项 说明
-F fs 指定分隔符
-v var=val 自定义定义变量并进行赋值
-f program-file 从文件中读入操作
-r,--re-interval 支持以{x,y}的正则匹配
-h 显示帮助信息

Pattern

    awk 中模式可以理解为在处理文本行前需要满足的条件,如果满足则进行处理。常用的模式(Pattern)如下所示:

  • BEGIN { 语句 }:指定在处理文本之前需要进行的操作
  • END { 语句 }: 指定在文件文本之后需要进行的操作
  • 表达式 { 语句 }:对于表达式为真时需要进行的操作
  • /正则表达式/ { 语句 }:对正则表达式能匹配的结果需要进行的操作

如果遇到 / ,则需要进行转义操作,使用 /

如果正则需要使用{x,y},则需要使用
--posix
--re-interval选项

  • 组合模式 { 语句 }:通过与(&&)、或(||)和非(|)或者{}组合的多个表达式,需要进行的操作
  • 模式1,模式2 { 语句 }:范围模式(range pattern) 匹配从与模式1匹配的行到与模式2相匹配的行(包含该行)之间所有的行需要进行操作

    awk 支持的条件运算符如下所示:

运算符 含义 示例
< 小于 x < y
<= 小于等于 x <= y
> 大于 x > y
>= 大于等于 x >= y
== 等于 x == y
!= 不等于 x != y
~ 与正则匹配则为真 x ~/正则/
!~ 与正则不匹配则为真 x !~/正则/

1、常规用法:

2、正则表达式用法:

Action

    awk 中的操作(Action)其主要作用是对符合模式的数据进行的命令操作,如显示打印等。最常用的就是print。

Action的 { } 必须与其对应的模式处理同一行

Action常用组合方式如下所示:

  • 方式一:在这种方式中,各个动作间是顺序执行,即执行完成第一个动作后,再执行第二个,等最后一个动作执行完成后,再重复第一个动作,如此循环直到结束。因此输出的结果也是每个动作一行

awk '{print \$1} {print \$2}'

  • 方式二:执行效果同方式一

awk '{print \$1 ; print \$2}'

  • 方式三:将所的输出结果全部打印输出到一行上面

awk '{print \$1 , \$2}'

以上三种用法示例如下所示:

本文同步在微信订阅号上发布,如各位小伙伴们喜欢我的文章,也可以关注我的微信订阅号:woaitest,或扫描下面的二维码添加关注:

最新文章

  1. Install Shield 打包教程
  2. C++宏定义中&quot;#&quot;与&quot;##&quot;的妙用
  3. 理解js闭包(二)
  4. HttpContext 讲解
  5. 大仙说道之Android studio实现Service AIDL
  6. The main roles of LTE eNodeB.
  7. [每日一题] 11gOCP 1z0-053 :2013-09-30 ASMCMD.......................................................8
  8. Linux学习之wget命令
  9. UWP win10 app 新关键字x:Bing
  10. jmockito模拟方法中参数如何指定
  11. [转]https://www.jianshu.com/p/06443248f4d8
  12. python,pil库的小应用
  13. session随笔
  14. vs链接错误解决方法
  15. Recover InnoDB dictionary
  16. xmldecoder漏洞
  17. lamp服务器被人恶意绑定域名的解决办法
  18. 高性能 Socket 组件 HP-Socket v3.2.1 正式公布
  19. MIPS 汇编指令学习
  20. Metaspliot进行漏洞扫描

热门文章

  1. moodle搭建相关的笔记
  2. const 补充
  3. Ubuntu14.04安装有道词典(openyoudao)
  4. Devexpres下LookUpEdit绑定数据后会默认弹出数据框的解决办法
  5. 微信小程序获取用户openid,头像昵称信息,后台java代码
  6. word2vec相关
  7. Docker,win10
  8. 网络通信和TCP详解
  9. cpu真实核数
  10. 可视化库-Matplotlib-3D图(第四天)