awk基础01-基本用法
什么是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-基本用法的更多相关文章
- awk程序设计语言之-awk基础
awk程序设计语言之-awk基础 http://man.linuxde.net/ 常用工具命令之awk命令 awk是一种编程语言,用于在Linux/Unix下对文本和数据处理.数据可以来自标准输入(s ...
- Linux基础01 学会使用命令帮助
Linux基础01 学会使用命令帮助 概述 在linux终端,面对命令不知道怎么用,或不记得命令的拼写及参数时,我们需要求助于系统的帮助文档:linux系统内置的帮助文档很详细,通常能解决我们的问题, ...
- awk基础 [马哥视频]
awk基础 1.1 print print的使用格式: print item1,item2, …. 要点: 各项目自己使用逗号隔开,而输出时则以空白字符分隔: 输出的item可以为字符串或者数值,当前 ...
- shell编程系列21--文本处理三剑客之awk中数组的用法及模拟生产环境数据统计
shell编程系列21--文本处理三剑客之awk中数组的用法及模拟生产环境数据统计 shell中的数组的用法: shell数组中的下标是从0开始的 array=("Allen" & ...
- awk下 gsub函数用法
(2012-03-27 01:37:28) 标签: awk gsub linux 函数 it 分类: linux gsub函数则使得在所有正则表达式被匹配的时候都发生替换 gsub(regular ...
- javascript基础01
javascript基础01 Javascript能做些什么? 给予页面灵魂,让页面可以动起来,包括动态的数据,动态的标签,动态的样式等等. 如实现到轮播图.拖拽.放大镜等,而动态的数据就好比不像没有 ...
- Androd核心基础01
Androd核心基础01包含的主要内容如下 Android版本简介 Android体系结构 JVM和DVM的区别 常见adb命令操作 Android工程目录结构 点击事件的四种形式 电话拨号器Demo ...
- java基础学习05(面向对象基础01)
面向对象基础01 1.理解面向对象的概念 2.掌握类与对象的概念3.掌握类的封装性4.掌握类构造方法的使用 实现的目标 1.类与对象的关系.定义.使用 2.对象的创建格式,可以创建多个对象3.对象的内 ...
- EasyUI中Base(基础)的基本用法
EasyUI中Base(基础)的用法 一.Base(基础) 1.parser 解析器 2.easyloader 简单加载 3.draggable 拖动 4.droppable 放置 5.resizab ...
随机推荐
- JAVA通过JDBC连接Oracle数据库详解【转载】
JAVA通过JDBC连接Oracle数据库详解 (2011-03-15 00:10:03) 转载▼http://blog.sina.com.cn/s/blog_61da86dd0100q27w.htm ...
- 手写简易WEB服务器
今天我们来写一个类似于Tomcat的简易服务器.可供大家深入理解一下tomcat的工作原理,本文仅供新手参考,请各位大神指正!首先我们要准备的知识是: Socket编程 HTML HTTP协议 服务器 ...
- 洛谷八连测R6
本次测试暴0!!!还有两周就要考试啦!!! 看题目时觉得难度不大,就直接写正解,没有参照数据,导致测出的结果和预想有较大差距. 不过得到经验,不管题目难易(除了D1T1)都要参照数据一部分一部分写,那 ...
- 修改Gradle 和Maven本地仓库的位置方法
本文转载自:https://www.cnblogs.com/dwb91/p/6523541.html 关于Maven的配置: 用过Maven的开发人员应该知道Maven可以通过配置 conf文件夹下面 ...
- selenium 笔记 2018
1.指定浏览器驱动:dr = webdriver.Firefox(executable_path = '/Users/xxx/Documents/selenium_py/geckodriver/gec ...
- 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 ...
- solr跨core查询
参考文档:这里的跨core不使用solrcloud http://wiki.apache.org/solr/CoreAdmin 注意:跨core查询功能相比单core查询,是有限制的 只需要在ur ...
- JavaScript之深拷贝&浅拷贝
深拷贝&浅拷贝,说起来都明白,但是说不出所以然.今天就系统的整理下思绪,一点点的将其分析出所以然 废话不多说 浅拷贝 简单的说就是一个值引用,学生时代接触过编程的人都应该了解过指针,浅拷贝可以 ...
- docker redis
https://www.cnblogs.com/cgpei/p/7151612.html 重启docker >systmctl restart docker >mkdir -p ~/red ...
- 从LinqPad入门Linq
为什么要学习Linq? 在我们日常开发中,经常需要从数据库中执行各式各样的查询来获取需要的数据.但是如果需要对查询获得的数据进行二次筛选呢?linq就提供了对于可枚举类型(实现IEnumerable接 ...