弱者,是没有资格要求公平的。

          --《秦时明月》卫庄

参考文献:

  http://www.ruanyifeng.com/blog/2018/11/awk.html 阮一峰

  https://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858470.html

  https://man.linuxde.net/awk

  awk是一种优良的文本处理工具,linux及unix环境中现有的功能最强大的数据处理引擎之一。

  awk提供了极其强大的功能:可以进行正则表达式的匹配,样式装入,流控制,数学运算符,进程控制语句甚至于内置的变量和函数。它具备了一个完整的语言应该具有的几乎所有的精美特性。实际上awk的确拥有自己的语言:awk程序设计语言,三位创建者已将它正式定义为“样式扫描和处理语言”。它允许创建简短的程序,这些程序读取输入文件,为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其他功能。

  最简单的说,awk是一种用于处理文本的编程语言工具。awk在很多方面类似于unix shell语言,尽管awk具有完全属于其本身的语法。(--取自wiki)

语法

awk [option] 'script' var = value file(s)

awk [opyion] -f script var = value file(s)

常用命令选项:

-F fs fs指定输入分隔符,fs可以是字符串或正则表达式

-v var=value  赋值一个用户定义的变量,将外部变量传递给awk

-f scripfile  从脚本中读取awk命令

-m[fr] val  对val值设置内在限制,-mf选项限制分配给val的最大块数目;-mr选项限制记录的最大数目。这两个功能是Bell实验室版awk的扩展功能,在标准awk中不适用。

基本用法

awk 动作 文件名

示例:

awk '{print $0}' demo.txt

上方示例中,demo.txt是awk要处理的文件。前面单引号内部有一个大括号,里面就是每一行的处理动作print $0。其中print是打印命令,$0代表当前行,因此上面的执行结果,就是把每一行原样打印出来。

awk会根据空格和制表符,将每一行分成若干字段,依次用$1,$2,$3代表第一个字段、第二个字段、第三个字段。

echo 'This is a student' | awk '{print $3}'

打印出a,a为第三个字段。

如需要指定分割符,则要加上-F参数。

示例:

awk -F ';' '{print $1}' demo.txt

变量

$NF代表最后一个字段。

echo 'this is a test' | awk '{print $NF}'

$(NF-1)代表倒数第二个字段

awk -F ':' '{print $1, $(NF-1)}' demo

print命令里面的逗号,表示输出的时候,两部分之间使用空格分隔。

NR表示当前处理的是第几行

awk -F ':' '{print NR ") " $1}' demo

print 命令中如果原样输出字符,要放在双引号里面。

awk的其他内置变量如下

FILENAME:当前文件名
FS:字段分隔符,默认是空格和制表符。
RS:行分隔符,用于分割每一行,默认是换行符。
OFS:输出字段的分隔符,用于打印时分隔字段,默认为空格。
ORS:输出记录的分隔符,用于打印时分隔记录,默认为换行符。
OFMT:数字输出的格式,默认为%.6g。

函数

tolower():字符转为小写。
length():返回字符串长度。
substr():返回子字符串。
sin():正弦。
cos():余弦。
sqrt():平方根。
rand():随机数。

条件

awk '条件 动作' 文件名

awk -F ':' '/usr/ {print $1}' demo.txt

print命令前面是正则表达式,只输出包含user的行。

awk -F ':' 'NR %2 = 1 {print $1}' demo.txt

输出奇数行

awk -F ':' 'NR >3 {print $1}' demo.txt

输出第三行以后的行

#输出第一个字段等于指定值的行
$ awk -F ':' '$1 == "root" {print $1}' demo.txt
root $ awk -F ':' '$1 == "root" || $1 == "bin" {print $1}' demo.txt
root
bin

if语句

awk -F ':' '{if ($1 > "m") print $1}' demo

输出第一个字段的第一个字符大于m的行

if可指定else部分

awk -F ':' '{if ($1 > "m") print $1; else print "---"}' demo

Linux必知必会--awk的更多相关文章

  1. 读书笔记--SQL必知必会--建立练习环境

    书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL in 10 Minutes - Fourth Edition> MyS ...

  2. python网络爬虫,知识储备,简单爬虫的必知必会,【核心】

    知识储备,简单爬虫的必知必会,[核心] 一.实验说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou 2. 环境介绍 本实验环境采用带桌面的Ubuntu Linux环境,实验中会用到桌 ...

  3. 读《MySQL必知必会》我学到了什么?

    前言 最近在写项目的时候发现自己的SQL基本功有些薄弱,遂上知乎查询MYSQL关键字,期望得到某些高赞答案的指点,于是乎发现了 https://www.zhihu.com/question/34840 ...

  4. 《MySQL必知必会》通配符 ( like , % , _ ,)

    <MySQL必知必会>通配符 ( like , % , _ ,) 关键字 LIke WHERE 搜索子句中使用通配符,必须使用 LIKE 操作符. % 百分号通配符 % 表示任意字符出现任 ...

  5. 读书笔记汇总 - SQL必知必会(第4版)

    本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...

  6. 读书笔记--SQL必知必会12--联结表

    12.1 联结 联结(join),利用SQL的SELECT在数据查询的执行中联结表. 12.1.1 关系表 关系数据库中,关系表的设计是把信息分解成多个表,一类数据一个表,各表通过某些共同的值互相关联 ...

  7. 读书笔记--SQL必知必会18--视图

    读书笔记--SQL必知必会18--视图 18.1 视图 视图是虚拟的表,只包含使用时动态检索数据的查询. 也就是说作为视图,它不包含任何列和数据,包含的是一个查询. 18.1.1 为什么使用视图 重用 ...

  8. 《MySQL 必知必会》读书总结

    这是 <MySQL 必知必会> 的读书总结.也是自己整理的常用操作的参考手册. 使用 MySQL 连接到 MySQL shell>mysql -u root -p Enter pas ...

  9. 《SQL必知必会》学习笔记(一)

    这两天看了<SQL必知必会>第四版这本书,并照着书上做了不少实验,也对以前的概念有得新的认识,也发现以前自己有得地方理解错了.我采用的数据库是SQL Server2012.数据库中有一张比 ...

  10. SQL 必知必会

    本文介绍基本的 SQL 语句,包括查询.过滤.排序.分组.联结.视图.插入数据.创建操纵表等.入门系列,不足颇多,望诸君指点. 注意本文某些例子只能在特定的DBMS中实现(有的已标明,有的未标明),不 ...

随机推荐

  1. USB、UART、SPI等总线速率(转)

    1. USB总线 USB1.1: ——-低速模式(low speed):1.5Mbps ——-全速模式(full speed): 12Mbps USB2.0:向下兼容.增加了高速模式,最大速率480M ...

  2. leetcode 111. 二叉树的最小深度

    题目描述: 给定一个二叉树,找出其最小深度. 最小深度是从根节点到最近叶子节点的最短路径上的节点数量. 说明: 叶子节点是指没有子节点的节点. 示例: 给定二叉树 [3,9,20,null,null, ...

  3. kube-prometheus部署

    一.从git拉取相应yaml文件 git clone https://github.com/coreos/kube-prometheus.git 二.修改grafana及prometheus的serv ...

  4. Airtest-UI 自动化集大成者

    前言 Airtest是由网易研发的一款基于Python的.跨平台的UI自动化测试框架,基于图像识别原理,适用于游戏和App.该项目目前已在Github上面开源: https://github.com/ ...

  5. HUT 排序训练赛 G - Clock

    Clock Time Limit: 1000MS   Memory Limit: 32768KB   64bit IO Format: %I64d & %I64u [Submit]   [Go ...

  6. windows下隐藏磁盘分区(转)

    在一定情况下有的人会想隐藏掉部分分区,比如双系统的情况 有两种方式 方法1: 删除盘符,适合在双系统的情况下隐藏掉另外一个系统相关的分区 请注意是删除盘符 不是删除分区 此电脑右键管理 点击磁盘管理 ...

  7. linux 1-常用命令

    文件处理命令: 命令格式:命令 [-选项] [参数] 例如:ls -la /etc   多个选项可以写在一起,不区分前后关系,例如 -l 和 -a 一起写成 -la 目录处理命令:ls (就是list ...

  8. 『2019 SummerCamp 总结』

    做题 对于习题方面,我们感觉一个暑假还是留下了不少的题要写,大部分应该是讲师讲课的例题,还有少部分考试题.考试题没有订正完是因为还有算法不会,或是因为题太毒瘤了不会.同时,也发现自己还是有很多应该学的 ...

  9. TCP/UDP的网络底层实现

    1.1Socket的使用背景 当我们在使用微信.玩游戏.收发邮件,以及用web浏览器上网时,底层的实现是TCP/UDP的协议,封装socket实现网络通信功能. 了解了网络通信的底层实现原理,在出现s ...

  10. 你读过的最好的 C++ 开源代码是什么?

    LevelDb LevelDb是谷歌两位大神级别的工程师发起的开源项目,简而言之,LevelDb是能够处理十亿级别规模Key-Value型数据持久性存储的C++ 程序库.链接:google/level ...