Linux命令之awk
awk是一个有强大的文本格式化能力的linux命令,早期是在Unix上实现的,linux后来也可以使用了,我们在Linux上使用的awk是gawk(GNU awk的意思)
语法
awk [option] '模式{动作}' file
- option表示awk的可选参数,可以设置分隔符等内容
- 模式可以先简单理解成条件,用来指定打印的内容,非必填,未填时表示文本的所有行
- 动作可以理解为对文本进行处理,最常用的处理就是打印文本:
printf
- file就是文本来源,可以指定是某个文件
基础概念
awk其实是将文本的内容按照行和列进行分割,然后按照指定行或列对数据进行格式化处理。以下先了解一些基础概念:
- awk默认以空格为分隔符(多个空格也识别为一个空格)
- awk一行行处理文件数据,根据分隔符将一行数据处理成列,使用
$
去表示列$0
:表示一整行,即该行的所有列$n
:n表示一个具体的数字,表示第几列,比如$1
表示第一列,$4
表示第4列FS
:字段分隔符,默认是空格NF
:Number of fields,表示当前行分割后的字段数(即一共多少列),NF-1
表示倒数第二列NR
:Number of records,当前文本记录数(行数),可以通过NR==n
去打印指定行的内容
列
分隔符
分隔符默认是空格(多个空格也识别成一个空格)
可以设置分隔符,设置方法有2种:
- 方法1:
-F
可以指定分隔符 - 方法2:
-v FS="xx"
设置分隔符,其中-v
表示修改awk变量,FS是分隔符变量,-F
也是通过方法2实现的
多个字段
如果想输出多个指定的列的内容,需要使用英文逗号,
进行分割(打印出来的内容默认使用空格进行分割)
如果想要将列字段之间的逗号转成其他非空格输出,可以通过-v OFS=="xxx"
的方式来指定英文逗号,
的输出
自定义输出
如果想在字段内容中包含其他指定输出,可以在print中进行定制
注意:如果有添加的字符串内容输出,则awk命令最外层必须是单引号,内层双引号
NF倒数列和字段数
NF
可以表示当前行的字段数
如果一行当中有多个字段,然后想要打印的字段又在末尾,从前面数的话容易数错,可以从末尾开始数,NF
可以表示倒数第一列,NF-1
表示倒数第二列,依次类推
行
NR
:Number of records,当前文本记录数(行数),可以通过NR==n
去打印指定行的内容
指定行
如果只想输出指定的行数据时,可以通过NR
来设置条件,指定行
- 条件设置中只有一个
NR==n
,则表示打印第几行的内容- 条件设置中有2个
NR==n
(通过英文逗号,
连接,如NR==n,NR==m
m比n大),则表示打印从指定行到另一个指定行(包括)的内容
添加行号
如果想打印出对应内容在文本中的行号,也可以使用NR
变量,因为NR
表示当前行数
组合命令
awk也可以对其他命令的输出内容进行处理
比如获取本机的ip地址:
awk变量
前面的示例中我们使用-v
参数,这个参数时可以定义或修改变量的
awk内置变量
awk有一些内置变量,常用的内置变量如下:
内置变量 | 说明 |
---|---|
FS | File Separator,输入字段分隔符,默认为空格 |
OFS | Output File Separator,输出字段分隔符,默认为单个空格 |
RS | Record Separator,输入记录分隔符(输入换行符),指定输入时的换行符,即指定按照什么字符进行换行 |
ORS | Output Record Separator,输出记录分隔符(输出换行符),指定输出时的换行符,即指定输出的换行符 |
NF | Number of fields,表示当前行分割后的字段数(即一共多少列) |
NR | Number of records,当前文本记录数(行数) |
FNR | Files Number of records,各文件分别计数的行号 |
FILENAME | 当前文件名 |
ARGC | 命令行参数 |
ARGV | 数组,保存的是命令行所给定的各参数 |
RS和ORS
一般情况下,都是以\n
(windows系统)或\r
(Linux系统)作为换行符,RS指定文本中的换行符符号,ORS指定输出内容中的换行符符号
FNR按照各文件计算行号
前面的章节有说到NR
,这个针对全部文本内容的行号。
FNR
,Files Number of records的缩写,是按照各个文本内的行号输出的
FILENAME文件名
FILENAME
是当前文件名的awk内置变量,保存了当前行所在的文件
格式化输出
前面的例子基本上是使用的print
,这里重点说下printf
,与print
最大的不同是:
printf
需要指定format,format用于只当后面的每个item的输出格式printf
语句不会自动打印换行符(\n
)
printf
跟C语言的printf()
函数基本一致,这里简单介绍下格式和一些修饰符。
format格式的指示符都以%开头,后面跟一个字符,相关的内容如下:
格式 | 描述 |
---|---|
%c | 显示字符的ASCII码 |
%d 、%i | 十进制整数 |
%e 、%E | 科学计数法显示数值 |
%f | 显示浮点数 |
%g 、%G | 以科学计数法的格式或浮点数的格式显示数值 |
%s | 字符串 |
%u | 无符号整数 |
%% | 显示%自身 |
printf比较常用的修饰符:
-
:左对齐,默认右对齐+
:显示数值符号,即正数会在数值前有“+”,负数在数值前有“-”
修饰符一般在符号%
后面加上
模式(条件)
awk命令awk [option] '模式{动作}' file
中,模式可以简单理解为条件,这个条件可以是指定行或指定列,或者指定前置和后置,在前面的例子中,我们有通过NR==n
去指定行,这里再详细说下模式。
关系运算符
前面关于指定行我们用的是==
,其实是有多个关系运算符选择,关系运算符适用于行和列
关系运算符 | 描述 | 示例 |
---|---|---|
< | 小于 | NR<x |
<= | 小于等于 | NR<=x |
== | 等于 | NR==x |
!= | 不等于 | NR!=x |
>= | 大于等于 | NR>=x |
> | 大于 | NR>x |
~ | 匹配正则 | /正则表达式/ ,如果正则表达式中有/ 符号,则通过\ 进行转义 |
!~ | 不匹配正则 | NRx |
多个模式(条件)时,通过英文逗号
,
连接,相当于and
BEGIN和END
有2个比较特殊的模式:
BEGIN
:设置处理文本之前需要执行的操作END
:设置处理文本完成之后需要执行的操作
在awk命令awk [option] '模式{动作}' file
中,动作有多个的话,每处理一行文本内容都会去执行另一个操作,因为动作是按照符合模式的文本去一行行处理的,如下:
如果只是想在文本处理前输出,并不想在每一行文本处理前输出,则可以使用BEGIN
如果只是想在(全部)文本处理完成后输出,并不想在每一行文本处理完成后输出,则可以使用END
BEGIN
和END
一起使用
使用正则表达式
模式可以使用正则表达式。
- 对某一个指定字段进行正则匹配或不匹配
- 匹配:
awk [option] '$n~/正则表达式/{动作}' file
($n中的n表示第几列) - 不匹配:
awk [option] '$n!~/正则表达式/{动作}' file
($n中的n表示第几列)
- 匹配:
- 对一行的内容进行正则匹配或不匹配
- 匹配:
awk [option] '/正则表达式/{动作}' file
- 不匹配:
awk [option] '!/正则表达式/{动作}' file
- 匹配:
相关文章:

Linux命令之awk
awk是一个有强大的文本格式化能力的linux命令,早期是在Unix上实现的,linux后来也可以使用了,我们在Linux上使用的awk是gawk(GNU awk的意思) 语法 awk [option] 模式{动作} file option表示awk的可选参数,可…...

实战-缓存数据一致+binlog初始+cannel监听+数据迁移,数据一致性架构设计
前言 一. 解决缓存不命中(高并发操作击穿打挂DB的风险) 当并发量打的时候,当我们的缓存过期时,就算到数据库的比例偏小的时候,我们的请求时比较大的。那也会存在数据库崩掉的情况。解决方案想法如下(总体…...

nginx配置中proxy_pass反向代理502的bug
记录一个坑人的bug, 我今天在一台新的liunx上运行nginx来进行反向代理时候,发现怎么测都是502 我把配置全部删了从头开始配置,发现80端口正常,80端口index.html正常,反向代理转向http://127.0.0.1/也正常,…...

JavaScript 两种方案打开文件对话框
JavaScript 两种方案打开文件对话框 文章目录JavaScript 两种方案打开文件对话框一、文件对话框二、传统方案表单元素🌈三、文件系统访问API💦四、更进一步使用六、代码仓库🌐七、参考资料💘七、推荐博文🍗一、文件对话…...

Pycharm远程服务器常见问题
2023年02月23日 问题描述:Pycharm远程服务器跑代码时,不小心把Pycharm关掉了,但服务器代码还在运行? 解决办法:kill进程 先用watch -n 0.5 nvidia_smi查看进程,然后kill -9 <进程> 1、nvidia-smi…...

内容团队如何快速出稿
对于内容团队而言,每个内容选题就相当于一个小项目,它们并非简单的线性工作流,相反其复杂程度不亚于一个小型工厂。一个内容选题会涉及内容形式,选题类型等多个变量,这些变量因素组合起来就是十几种不同类型的工作流。…...

es-08索引的批量操作
索引的批量操作 批量查询和批量增删改 批量查询 GET /_mget#批量查询 GET product/_search GET /_mget {"docs": [{"_index": "product","_id": 2},{"_index": "product","_id": 3}] }GET product/_mge…...

诈金花的概率
游戏使用一副除去大小王的扑克牌,共4个花色52张牌。 1、豹子(AAA最大,222最小)。2、同花顺(AKQ最大,A23最小)。3、同花(AKQ最大,352最小)。4、顺子ÿ…...

ESP32设备驱动-MLX90393磁场传感器驱动
MLX90393磁场传感器驱动 文章目录 MLX90393磁场传感器驱动1、MLX90393介绍2、硬件准备3、软件准备4、驱动实现1、MLX90393介绍 MLX90393 磁场传感器可以在运行时重新编程为不同的模式和不同的设置。 该传感器使用 Melexis 专有的 Triaxis 技术提供与沿 XYZ 轴感应的磁通密度成…...

Java面试题-Spring框架
Spring框架 1. BeanFactory和ApplicationContext有何区别 BeanFactory是Spring最底层的接口,是IoC的核心,定义IoC的基本功能。 BeanFactory具有:延迟实例化的特性。在启动的时候,不会实例化Bean,只有有需要从容器…...

【计算机物理模拟】-力矩、转动惯量和角速度之间的关系
力矩和角速度之间的关系可以通过牛顿第二定律和角动量定理来描述。 牛顿第二定律表明,物体的加速度与作用在物体上的合力成正比,加速度的方向与合力的方向相同。而对于旋转运动的物体,其加速度可以表示为半径 rrr 乘以角加速度 α\alphaα&a…...

async和await用法理解和快速上手 , 同步任务和异步任务顺序安排和轻松理解 , js代码执行顺序表面知道
学习关键语句 : async , await 用法 await 怎么使用 同步任务和异步任务 微任务和宏任务 js中代码执行顺序 写在前面 虽然说 async 和 await 是 Promise 的语法糖 , 但是用惯了Promise 的人(我) , 还真不能超快速使用上这个语法糖 , 所以赶紧写一篇文章出来让各位了解了解这个…...

Linux下java服务占用cpu过高如何处理
Linux下java服务占用cpu过高如何处理 top命令查看进程信息 top按下shiftp,按cpu使用率排行,可见进程1932占用最高,并且是一个java服务 使用jps命令确认java服务 [rootVM-16-16-centos ~]# jps 1011 Jps 9462 yuan_back-0.0.1-SNAPSHOT.jar 1932 spigot-1.18.jar查找异常进程中…...

ros下用kinectv2运行orbslam2
目录 前提 创建工作空间 orbslam2源码配置、测试: 配置usb_cam ROS功能包 配置kinect 前提 vim 、 cmake 、 git 、 gcc 、 g 这些一般都装了 主要是Pangolin 、 OpenCV 、 Eigen的安装 18.04建议Pangolin0.5 创建工作空间 我们在主目录下创建一个catkin_…...

MVP简单模型搭建【架构】
MVP简介 MVP是一种项目架构设计模式(说白了就是我们产品的一种设计方案) 其实MVP本质 就是将View和Model完全隔离,通过Presenter统一调度管理(Presenter扮演着中介的角色)传统的设计思路是我们直接跟房东谈࿰…...

若依ruoyi框架实现目录树与查询页面联动
目录1、业务场景2、前端api.js修改index.vue修改template修改script修改3、后端controllerserviceimpldomainentitytreeselect1、业务场景 后管页面实现目录数与查询页面的联动,类似若依框架用户管理页面。 2、前端 api.js修改 在原有的js文件里配置目录树的查…...

Laravel框架学习笔记——Laravel环境配置及安装(Ubuntu20.04为例)
目录引言1、安装Nginx2、安装PHP3、安装Composer4、搭建Laravel框架项目5、修改Nginx映射6、安装MySQL引言 好久没写博客了,因为个人需要, 所以要涉及到Laravel框架的学习,所以会出一系列的关于PHP的Laravel框架学习笔记,希望能够…...

模拟百度翻译-课后程序(JAVA基础案例教程-黑马程序员编著-第六章-课后作业)
【案例6-5】 模拟百度翻译 【案例介绍】 1.任务描述 大家对百度翻译并不陌生,本案例要求编写一个程序模拟百度翻译。用户输入英文之后搜索程序中对应的中文,如果搜索到对应的中文就输出搜索结果,反之给出提示。本案例要求使用Map集合实现英…...

自然语言处理(NLP)之求近义词和类比词<MXNet中GloVe和FastText的模型使用>
这节主要就是熟悉MXNet框架中的两种模型:GloVe和FastText的模型(词嵌入名称),每个模型下面有很多不同的词向量,这些基本都来自wiki维基百科和twitter推特这些子集预训练得到的。我们只需要导入mxnet.contrib中的text模块即可,这里…...

2023年CDGA考试-第13章-数据质量(含答案)
2023年CDGA考试-第13章-数据质量(含答案) 单选题 1.在导致数据质量问题的常见原因中关于数据输入问题以下描述正确的是: A.数据采集端缺乏数据质量管控 B.相同字段重复设计导致数据不一致 C.缺乏数据采集规范的制定 D.所有描述都正确 答案 D 2.数据质量计划应将其范围限…...

ASEMI高压MOS管ASE65R330参数,ASE65R330图片
编辑-Z ASEMI高压MOS管ASE65R330参数: 型号:ASE65R330 漏极-源极电压(VDS):650V 栅源电压(VGS):20V 漏极电流(ID):12.5A 功耗(P…...

LeetCode动态规划经典题目(九):子序列、子数组问题
目录 31. LeetCode674. 最长连续递增序列 32. LeetCode18. 最长重复子数组 33. LeetCode1143. 最长公共子序列 34. LeetCode1035. 不相交的线 35. LeetCode53. 最大子数组和 36. LeetCode392.判断子序列 37. LeetCode115. 不同的子序列 38. LeetCode583. 两个字符串的删…...

如何利用有限的数据发表更多的SCI论文?——利用ArcGIS探究环境和生态因子对水体、土壤和大气污染物的影响
SCI的写作和发表是科研人提升自身实力和实现自己价值的必要途径。“如何利用有限的数据发表更多的SCI论文?”是我们需要解决的关键问题。软件应用只是过程和手段,理解事件之间的内在逻辑和寻找事物之间的内在规律才是目的。如何利用有限的数据发表更多的…...

六【 SpringMVC框架】
一 SpringMVC框架 目录一 SpringMVC框架1.什么是MVC2.SpringMVC概述3.SpringMVC常见开发方式4.SpringMVC执行流程5.SpringMVC核心组件介绍6.快速构建Spring MVC程序✅作者简介:Java-小白后端开发者 🥭公认外号:球场上的黑曼巴 🍎个…...

【BBuf的CUDA笔记】八,对比学习OneFlow 和 FasterTransformer 的 Softmax Cuda实现
0x1. OneFlow/FasterTransformer SoftMax CUDA Kernel 实现学习 这篇文章主要学习了oneflow的softmax kernel实现以及Faster Transformer softmax kernel的实现,并以个人的角度分别解析了原理和代码实现,最后对性能做一个对比方便大家直观的感受到onefl…...

python 类对象的析构释放代码演示
文章目录一、类的构造函数与析构函数二、代码演示1. 引用的更迭2. 只在函数内部的类对象三、函数内部返回的类对象1. 使用全局变量 引用 函数内部的类对象一、类的构造函数与析构函数 init 函数是python 类的构造函数,在创建一个类对象的时候,就会自动调…...

Hadoop Shell常用命令
Hadoop Shell命令在管理HDFS的时候还是比较常用的,Hadoop Shell命令与shell命令极为相似,但是方便查询,在这里总结分享,大家enjoy~~ 1,cat 语法格式:hadoop fs -cat URI [URI …] 含义:将路径…...

Android中级——色彩处理和图像处理
色彩处理 通过色彩矩阵处理 色彩矩阵介绍 图像的RGBA可拆分为一个4行5列的矩阵和5行1列矩阵相乘 其中4行5列矩阵即为ColorMatrix,可通过调整ColorMatrix间接调整RGBA 第一行 abcde 决定新的 R第二行 fghij 决定新的 G第三行 klmno 决定新的 G第四行 pqrst 决定新…...

C++类和对象:类的定义、类对象的存储、this指针
目录 一. 对于面向过程和面向对象的认识 二. 类 2.1 struct关键字定义类 2.1.1 C语言中的struct关键字 2.1.2 C中的struct关键字 2.2 class关键字 2.1 使用class关键字定义类 三. 类的访问限定及封装 3.1 类的访问权限及访问限定符 3.1.1 访问权限 3.1.2 访问限定…...

代码随想录算法训练营第三十九天 | 62.不同路径,63. 不同路径 II
一、参考资料不同路径https://programmercarl.com/0062.%E4%B8%8D%E5%90%8C%E8%B7%AF%E5%BE%84.html 视频讲解:https://www.bilibili.com/video/BV1ve4y1x7Eu不同路径 IIhttps://programmercarl.com/0063.%E4%B8%8D%E5%90%8C%E8%B7%AF%E5%BE%84II.htmlhttps://progr…...