什么是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,或扫描下面的二维码添加关注:

awk基础01-基本用法的更多相关文章

  1. awk程序设计语言之-awk基础

    awk程序设计语言之-awk基础 http://man.linuxde.net/ 常用工具命令之awk命令 awk是一种编程语言,用于在Linux/Unix下对文本和数据处理.数据可以来自标准输入(s ...

  2. Linux基础01 学会使用命令帮助

    Linux基础01 学会使用命令帮助 概述 在linux终端,面对命令不知道怎么用,或不记得命令的拼写及参数时,我们需要求助于系统的帮助文档:linux系统内置的帮助文档很详细,通常能解决我们的问题, ...

  3. awk基础 [马哥视频]

    awk基础 1.1 print print的使用格式: print item1,item2, …. 要点: 各项目自己使用逗号隔开,而输出时则以空白字符分隔: 输出的item可以为字符串或者数值,当前 ...

  4. shell编程系列21--文本处理三剑客之awk中数组的用法及模拟生产环境数据统计

    shell编程系列21--文本处理三剑客之awk中数组的用法及模拟生产环境数据统计 shell中的数组的用法: shell数组中的下标是从0开始的 array=("Allen" & ...

  5. awk下 gsub函数用法

     (2012-03-27 01:37:28) 标签: awk gsub linux 函数 it 分类: linux gsub函数则使得在所有正则表达式被匹配的时候都发生替换 gsub(regular ...

  6. javascript基础01

    javascript基础01 Javascript能做些什么? 给予页面灵魂,让页面可以动起来,包括动态的数据,动态的标签,动态的样式等等. 如实现到轮播图.拖拽.放大镜等,而动态的数据就好比不像没有 ...

  7. Androd核心基础01

    Androd核心基础01包含的主要内容如下 Android版本简介 Android体系结构 JVM和DVM的区别 常见adb命令操作 Android工程目录结构 点击事件的四种形式 电话拨号器Demo ...

  8. java基础学习05(面向对象基础01)

    面向对象基础01 1.理解面向对象的概念 2.掌握类与对象的概念3.掌握类的封装性4.掌握类构造方法的使用 实现的目标 1.类与对象的关系.定义.使用 2.对象的创建格式,可以创建多个对象3.对象的内 ...

  9. EasyUI中Base(基础)的基本用法

    EasyUI中Base(基础)的用法 一.Base(基础) 1.parser 解析器 2.easyloader 简单加载 3.draggable 拖动 4.droppable 放置 5.resizab ...

随机推荐

  1. JAVA通过JDBC连接Oracle数据库详解【转载】

    JAVA通过JDBC连接Oracle数据库详解 (2011-03-15 00:10:03) 转载▼http://blog.sina.com.cn/s/blog_61da86dd0100q27w.htm ...

  2. 手写简易WEB服务器

    今天我们来写一个类似于Tomcat的简易服务器.可供大家深入理解一下tomcat的工作原理,本文仅供新手参考,请各位大神指正!首先我们要准备的知识是: Socket编程 HTML HTTP协议 服务器 ...

  3. 洛谷八连测R6

    本次测试暴0!!!还有两周就要考试啦!!! 看题目时觉得难度不大,就直接写正解,没有参照数据,导致测出的结果和预想有较大差距. 不过得到经验,不管题目难易(除了D1T1)都要参照数据一部分一部分写,那 ...

  4. 修改Gradle 和Maven本地仓库的位置方法

    本文转载自:https://www.cnblogs.com/dwb91/p/6523541.html 关于Maven的配置: 用过Maven的开发人员应该知道Maven可以通过配置 conf文件夹下面 ...

  5. selenium 笔记 2018

    1.指定浏览器驱动:dr = webdriver.Firefox(executable_path = '/Users/xxx/Documents/selenium_py/geckodriver/gec ...

  6. python调用R语言,关联规则可视化

    首先当然要配置r语言环境变量什么的 D:\R-3.5.1\bin\x64; D:\R-3.5.1\bin\x64\R.dll;D:\R-3.5.1;D:\ProgramData\Anaconda3\L ...

  7. solr跨core查询

    参考文档:这里的跨core不使用solrcloud http://wiki.apache.org/solr/CoreAdmin 注意:跨core查询功能相比单core查询,是有限制的   只需要在ur ...

  8. JavaScript之深拷贝&浅拷贝

    深拷贝&浅拷贝,说起来都明白,但是说不出所以然.今天就系统的整理下思绪,一点点的将其分析出所以然 废话不多说 浅拷贝 简单的说就是一个值引用,学生时代接触过编程的人都应该了解过指针,浅拷贝可以 ...

  9. docker redis

    https://www.cnblogs.com/cgpei/p/7151612.html 重启docker >systmctl restart docker >mkdir -p ~/red ...

  10. 从LinqPad入门Linq

    为什么要学习Linq? 在我们日常开发中,经常需要从数据库中执行各式各样的查询来获取需要的数据.但是如果需要对查询获得的数据进行二次筛选呢?linq就提供了对于可枚举类型(实现IEnumerable接 ...