Linux必知必会--awk
弱者,是没有资格要求公平的。
--《秦时明月》卫庄
参考文献:
http://www.ruanyifeng.com/blog/2018/11/awk.html 阮一峰
https://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858470.html
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的更多相关文章
- 读书笔记--SQL必知必会--建立练习环境
书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL in 10 Minutes - Fourth Edition> MyS ...
- python网络爬虫,知识储备,简单爬虫的必知必会,【核心】
知识储备,简单爬虫的必知必会,[核心] 一.实验说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou 2. 环境介绍 本实验环境采用带桌面的Ubuntu Linux环境,实验中会用到桌 ...
- 读《MySQL必知必会》我学到了什么?
前言 最近在写项目的时候发现自己的SQL基本功有些薄弱,遂上知乎查询MYSQL关键字,期望得到某些高赞答案的指点,于是乎发现了 https://www.zhihu.com/question/34840 ...
- 《MySQL必知必会》通配符 ( like , % , _ ,)
<MySQL必知必会>通配符 ( like , % , _ ,) 关键字 LIke WHERE 搜索子句中使用通配符,必须使用 LIKE 操作符. % 百分号通配符 % 表示任意字符出现任 ...
- 读书笔记汇总 - SQL必知必会(第4版)
本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...
- 读书笔记--SQL必知必会12--联结表
12.1 联结 联结(join),利用SQL的SELECT在数据查询的执行中联结表. 12.1.1 关系表 关系数据库中,关系表的设计是把信息分解成多个表,一类数据一个表,各表通过某些共同的值互相关联 ...
- 读书笔记--SQL必知必会18--视图
读书笔记--SQL必知必会18--视图 18.1 视图 视图是虚拟的表,只包含使用时动态检索数据的查询. 也就是说作为视图,它不包含任何列和数据,包含的是一个查询. 18.1.1 为什么使用视图 重用 ...
- 《MySQL 必知必会》读书总结
这是 <MySQL 必知必会> 的读书总结.也是自己整理的常用操作的参考手册. 使用 MySQL 连接到 MySQL shell>mysql -u root -p Enter pas ...
- 《SQL必知必会》学习笔记(一)
这两天看了<SQL必知必会>第四版这本书,并照着书上做了不少实验,也对以前的概念有得新的认识,也发现以前自己有得地方理解错了.我采用的数据库是SQL Server2012.数据库中有一张比 ...
- SQL 必知必会
本文介绍基本的 SQL 语句,包括查询.过滤.排序.分组.联结.视图.插入数据.创建操纵表等.入门系列,不足颇多,望诸君指点. 注意本文某些例子只能在特定的DBMS中实现(有的已标明,有的未标明),不 ...
随机推荐
- nginx设置防盗链
1.一般的防盗链设置: location ~* \.(gif|jpg|png|jpeg)$ { expires 30d; valid_referers none blocke *.julyy.site ...
- malloc vs memset
malloc vs memset OS内存分配过程如下: 用户态程序使用malloc接口,分配虚拟地址. 用户程序访问该虚拟地址,比如memset. 硬件(MMU)需要将虚拟地址转换为物理地址. 硬件 ...
- .net core使用AutoMapper
AutoMapper文档:http://docs.automapper.org/en/stable/The-MyGet-build.html 新的版本抛弃了静态API方法,我们将使用依赖注入来完成. ...
- Python 3.X 练习集100题 05
用 *号输出字母 C的图案 方法1: print(" ***** ") print(" ** * ") print(" ** ") prin ...
- Java8 新特性 方法引用
什么是方法引用 方法引用可以被看作仅仅调用特定方法的Lamdba表达式的一种快捷方式.比如说Lamdba代表的只是直接调用这个方法,最好还是用名称来调用它,可不用用对象.方法名(),方法引用,引用 ...
- WIndowsServer ---------- 将本地文件映射到服务器
我们在进行在文件中传递文件的时候,对于一些文件比较大的话就很难传递成功,所以可以同过文件映射, 将需要的文件所在的盘符映射到服务器中,在服务其中进行文件传递. 1.找到电脑中的远程桌面,在附件或控制面 ...
- 了解编程语言 ----- c# 简介
1.编程语言 编程语言: 为了实现人与机器的交互,计算机主要识别的就是 0 和 1 语言的发展过程主要分为: 1.面向机器的语言:二进制,汇编 2.面向过程的语言:汇编语言,C语言,B语言, 3.基于 ...
- 【C学习笔记】一
一.运算符优先级 逻辑非>算术运算符>关系运算符>逻辑运算符>赋值运算符>逗号运算符 逻辑运算符>条件运算符>赋值运算符 对于if的执行语句,如果是一条语句那 ...
- c++11多线程记录0
两种并发编程模型 多进程 进程间通信常用的几种方式: 文件 管道 消息队列 多线程 一个进程中存在的多个线程,通常通过共享内存来通信,(说的非常非常粗俗,就是通过类似"全局变量"的 ...
- 阿里云CentOS服务器下安装Golang1.13并配置代理
注:root账户或添加sudo命令运行. 下载到/usr/local位置并解压 cd /usr/local wget https://studygolang.com/dl/golang/go1.13. ...