当前位置: 首页 > news >正文

Linux命令之awk

awk是一个有强大的文本格式化能力的linux命令,早期是在Unix上实现的,linux后来也可以使用了,我们在Linux上使用的awk是gawk(GNU awk的意思)

语法

awk [option] '模式{动作}' file

  • option表示awk的可选参数,可以设置分隔符等内容
  • 模式可以先简单理解成条件,用来指定打印的内容,非必填,未填时表示文本的所有行
  • 动作可以理解为对文本进行处理,最常用的处理就是打印文本:printprintf
  • 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==mm比n大),则表示打印从指定行到另一个指定行(包括)的内容

在这里插入图片描述

添加行号

如果想打印出对应内容在文本中的行号,也可以使用NR变量,因为NR表示当前行数
在这里插入图片描述

组合命令

awk也可以对其他命令的输出内容进行处理
比如获取本机的ip地址:
在这里插入图片描述

awk变量

前面的示例中我们使用-v参数,这个参数时可以定义或修改变量的

awk内置变量

awk有一些内置变量,常用的内置变量如下:

内置变量说明
FSFile Separator,输入字段分隔符,默认为空格
OFSOutput File Separator,输出字段分隔符,默认为单个空格
RSRecord Separator,输入记录分隔符(输入换行符),指定输入时的换行符,即指定按照什么字符进行换行
ORSOutput Record Separator,输出记录分隔符(输出换行符),指定输出时的换行符,即指定输出的换行符
NFNumber of fields,表示当前行分割后的字段数(即一共多少列)
NRNumber of records,当前文本记录数(行数)
FNRFiles 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

在这里插入图片描述
BEGINEND一起使用
在这里插入图片描述

使用正则表达式

模式可以使用正则表达式。

  • 对某一个指定字段进行正则匹配或不匹配
    • 匹配:awk [option] '$n~/正则表达式/{动作}' file($n中的n表示第几列)
    • 不匹配:awk [option] '$n!~/正则表达式/{动作}' file($n中的n表示第几列)
  • 对一行的内容进行正则匹配或不匹配
    • 匹配:awk [option] '/正则表达式/{动作}' file
    • 不匹配:awk [option] '!/正则表达式/{动作}' file

在这里插入图片描述

相关文章:

Linux命令之awk

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

实战-缓存数据一致+binlog初始+cannel监听+数据迁移,数据一致性架构设计

前言 一. 解决缓存不命中&#xff08;高并发操作击穿打挂DB的风险&#xff09; 当并发量打的时候&#xff0c;当我们的缓存过期时&#xff0c;就算到数据库的比例偏小的时候&#xff0c;我们的请求时比较大的。那也会存在数据库崩掉的情况。解决方案想法如下&#xff08;总体…...

nginx配置中proxy_pass反向代理502的bug

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

JavaScript 两种方案打开文件对话框

JavaScript 两种方案打开文件对话框 文章目录JavaScript 两种方案打开文件对话框一、文件对话框二、传统方案表单元素&#x1f308;三、文件系统访问API&#x1f4a6;四、更进一步使用六、代码仓库&#x1f310;七、参考资料&#x1f498;七、推荐博文&#x1f357;一、文件对话…...

Pycharm远程服务器常见问题

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

内容团队如何快速出稿

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

es-08索引的批量操作

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

诈金花的概率

游戏使用一副除去大小王的扑克牌&#xff0c;共4个花色52张牌。 1、豹子&#xff08;AAA最大&#xff0c;222最小&#xff09;。2、同花顺&#xff08;AKQ最大&#xff0c;A23最小&#xff09;。3、同花&#xff08;AKQ最大&#xff0c;352最小&#xff09;。4、顺子&#xff…...

ESP32设备驱动-MLX90393磁场传感器驱动

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

Java面试题-Spring框架

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

【计算机物理模拟】-力矩、转动惯量和角速度之间的关系

力矩和角速度之间的关系可以通过牛顿第二定律和角动量定理来描述。 牛顿第二定律表明&#xff0c;物体的加速度与作用在物体上的合力成正比&#xff0c;加速度的方向与合力的方向相同。而对于旋转运动的物体&#xff0c;其加速度可以表示为半径 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源码配置、测试&#xff1a; 配置usb_cam ROS功能包 配置kinect 前提 vim 、 cmake 、 git 、 gcc 、 g 这些一般都装了 主要是Pangolin 、 OpenCV 、 Eigen的安装 18.04建议Pangolin0.5 创建工作空间 我们在主目录下创建一个catkin_…...

MVP简单模型搭建【架构】

MVP简介 MVP是一种项目架构设计模式&#xff08;说白了就是我们产品的一种设计方案&#xff09; 其实MVP本质 就是将View和Model完全隔离&#xff0c;通过Presenter统一调度管理&#xff08;Presenter扮演着中介的角色&#xff09;传统的设计思路是我们直接跟房东谈&#xff0…...

若依ruoyi框架实现目录树与查询页面联动

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

Laravel框架学习笔记——Laravel环境配置及安装(Ubuntu20.04为例)

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

模拟百度翻译-课后程序(JAVA基础案例教程-黑马程序员编著-第六章-课后作业)

【案例6-5】 模拟百度翻译 【案例介绍】 1.任务描述 大家对百度翻译并不陌生&#xff0c;本案例要求编写一个程序模拟百度翻译。用户输入英文之后搜索程序中对应的中文&#xff0c;如果搜索到对应的中文就输出搜索结果&#xff0c;反之给出提示。本案例要求使用Map集合实现英…...

自然语言处理(NLP)之求近义词和类比词<MXNet中GloVe和FastText的模型使用>

这节主要就是熟悉MXNet框架中的两种模型&#xff1a;GloVe和FastText的模型(词嵌入名称)&#xff0c;每个模型下面有很多不同的词向量&#xff0c;这些基本都来自wiki维基百科和twitter推特这些子集预训练得到的。我们只需要导入mxnet.contrib中的text模块即可&#xff0c;这里…...

2023年CDGA考试-第13章-数据质量(含答案)

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

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中&#xff0c;我们会遇到使用 java 调用 dll文件 的情况&#xff0c;此时大概率出现UnsatisfiedLinkError链接错误&#xff0c;原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用&#xff0c;结果 dll 未实现 JNI 协…...

ESP32读取DHT11温湿度数据

芯片&#xff1a;ESP32 环境&#xff1a;Arduino 一、安装DHT11传感器库 红框的库&#xff0c;别安装错了 二、代码 注意&#xff0c;DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

【磁盘】每天掌握一个Linux命令 - iostat

目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat&#xff08;I/O Statistics&#xff09;是Linux系统下用于监视系统输入输出设备和CPU使…...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解&#xff1a;由来、作用与意义**一、知识点核心内容****二、知识点的由来&#xff1a;从生活实践到数学抽象****三、知识的作用&#xff1a;解决实际问题的工具****四、学习的意义&#xff1a;培养核心素养…...

python如何将word的doc另存为docx

将 DOCX 文件另存为 DOCX 格式&#xff08;Python 实现&#xff09; 在 Python 中&#xff0c;你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是&#xff0c;.doc 是旧的 Word 格式&#xff0c;而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 &#x1f4dd; 在上一篇文章中&#xff0c;我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源&#xff0c;方便后续将资源打包到一个可执行文件中。 2.embed介绍 &#x1f3af; Go 1.16 引入了革命性的 embed 包&#xff0c;彻底改变了静态资源管理的…...

【分享】推荐一些办公小工具

1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由&#xff1a;大部分的转换软件需要收费&#xff0c;要么功能不齐全&#xff0c;而开会员又用不了几次浪费钱&#xff0c;借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...

人机融合智能 | “人智交互”跨学科新领域

本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...

LabVIEW双光子成像系统技术

双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制&#xff0c;展现出显著的技术优势&#xff1a; 深层组织穿透能力&#xff1a;适用于活体组织深度成像 高分辨率观测性能&#xff1a;满足微观结构的精细研究需求 低光毒性特点&#xff1a;减少对样本的损伤…...

提升移动端网页调试效率:WebDebugX 与常见工具组合实践

在日常移动端开发中&#xff0c;网页调试始终是一个高频但又极具挑战的环节。尤其在面对 iOS 与 Android 的混合技术栈、各种设备差异化行为时&#xff0c;开发者迫切需要一套高效、可靠且跨平台的调试方案。过去&#xff0c;我们或多或少使用过 Chrome DevTools、Remote Debug…...