Linux命令之awk

news2024/9/29 18:13:54

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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/370569.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mybatis与jpa

1、官方文档 mybatis&#xff1a;mybatis-spring – jpa&#xff1a;https://springdoc.cn/spring-data-jpa/ 应用文档 jpa详解_java菜鸟1的博客-CSDN博客 JPA简介及其使用详解_Tourist-xl的博客-CSDN博客_jpa的作用 2、使用比较 mybatis一般用于互联网性质的项目&#x…

zabbix4.0 Web页面配置 - 聚合图形的实现

目录 1、主机组Host groups配置 创建主机组 ​编辑 将一个主机添加至刚才创建的主机里面 2、用户参数UserParameter设置 示例&#xff1a; 添加一个参数&#xff1a;show.host.messages 模拟zabbix模板里面的参数再添加一个userparameter 3、触发器设置 示例&#xff1a; …

浏览器缓存之强缓存和协商缓存

为什么需要缓存? - 缓存的优点: 1.减少对服务器的访问次数,减轻了服务器的压力 2.节省用户网络带宽(就是省钱,带宽都是按流量算钱的) 3.从缓存读取更匀速减少等待优化了用户体验 - 缓存的缺点 资源被缓存后用户不能及时获取不到最新的资源,所以缓存不能乱用 强缓存 涉…

TypeScript快速上手语法+结合vue3用法

TypeScript快速上手语法结合vue3用法 前言&#xff1a; 本篇内容不涉及TypeScript安装以及配置&#xff0c;具体安装及配置篇可以看下面目录&#xff0c;本篇只涉及TypeScript语法相关内容&#xff0c;及结合vue3的用法。不讲废话&#xff0c;简单直接直接开撸。 目录 Type…

理想汽车--笔试(算法)

笔试分为选择题和编程题&#xff0c;选择题考的很全面&#xff0c;包括概率论、数据库、机器学习、python、数据结构。 选择题 1.在某些规划的分类器中&#xff0c;依据规划质量的某种度量对规划排序&#xff0c;保证每一个测试记录都是由覆盖它的‘最好的’规格来分类&#…

LeetCode-54. 螺旋矩阵

题目来源 54. 螺旋矩阵 题目思路 while循环只遍历"环"&#xff0c;不成环就不遍历了 四个边界 上边界 top : 0下边界 bottom : matrix.length - 1左边界 left : 0右边界 right : matrix[0].length - 1 矩阵不一定是方阵 top < bottom && left < r…

使用git从github.com中clone一个项目的源代码---git与github的安装配置与使用入门

本文目录git简介github简介git的安装github的配置1&#xff0c;注册github帐号2&#xff0c;登录github3&#xff0c;配置git4&#xff0c;生成密钥5&#xff0c;在github中添加密钥6&#xff0c;使用git从github.com中clone一个项目的源代码git简介 Git是一个开源的版本控制管…

Java知识复习(六)常见的设计模式(单例、原型、工厂)

前言 发现无论是什么设计模式&#xff0c;其实总的原则就是减少耦合&#xff0c;增加可复用代码&#xff0c;使系统更易于扩展 参考书籍&#xff1a;《秒懂设计模式》 1、单例模式&#xff08;Singleton&#xff09; 单例模式&#xff1a;即单一的实例&#xff0c;同时提供几…

【java web篇】项目管理构建工具Maven简介以及安装配置

&#x1f4cb; 个人简介 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是阿牛&#xff0c;全栈领域优质创作者。&#x1f61c;&#x1f4dd; 个人主页&#xff1a;馆主阿牛&#x1f525;&#x1f389; 支持我&#xff1a;点赞&#x1f44d;收藏⭐️留言&#x1f4d…

【离线数仓-8-数据仓库开发DWD层-交易域相关事实表】

离线数仓-8-数据仓库开发DWD层-交易域相关事实表离线数仓-8-数据仓库开发DWD层-交易域相关事实表一、DWD层设计要点二、交易域相关事实表1.交易域加购事务事实表1.加购事务事实表 前期梳理2.加购事务事实表 DDL表设计分析3.加购事务事实表 加载数据分析1.首日全量加购的数据加载…

基于APRX并行架构的高速QPSK解调实现(Matlab仿真篇)

由于QPSK系统下变频之后的信号中频为720MHz,信息符号速率为500Mbps,因此,采用传统的串行解调方案已无法在FPGA中实现解调。因此,本方案采用基于APRX并行架构实现对高速率的QPSK解调。如图1所示,为并行全数字QPSK接收机实现架构。 图1 并行全数字QPSK接收机实现架构 1 高速…

Golang 接口笔记

基本介绍接口是一个数据类型&#xff0c;可以定义一组方法&#xff0c;但都不需要实现。并且interface中不能包含任何变量。到某个自定义类型要使用的时候&#xff0c;再根据具体情况把这些方法实现出来语法type 接口名 interface {method1(参数列表) 返回值列表method2(参数列…

UG NX二次开发(C#)-CAM-点击插件自动进入CAM模块

文章目录 1、前言2、调用CAM模块错误2、进入加工模块1、前言 UG NX软件中CAM模块作为一个很重要的,也是其特别亮点的功能模块,能实现车、铣、磨、钻等加工工艺编程,但是由于其是通用性比较强,对于专业上的可能不能完全满足要求,这就要求我们在CAM模块下进行二次开发。我们…

操作系统核心知识点整理--进程篇

操作系统核心知识点整理--进程篇什么是系统调用进程篇什么是进程什么是线程从一次fork调用看linux进程和线程的本质区别小结用户级线程和内核级线程的区别进程的状态进程的切换进程调度并发问题死锁参考本文主要面向应用层软件开发人员整理一篇必须了解的操作系统核心知识图谱&…

maya多边形顶点变形批量传递方法

一、问题描述 做项目时&#xff0c;对于重复更改相同模型的顶点位置需要大量重复操作&#xff0c;maya默认提供了多边形属性传递的方法&#xff0c;如下图&#xff1a; 但一次只能执行一次&#xff0c;并且带有大量历史节点&#xff0c;此方式的好处是&#xff0c;可以实现实…

《零成本实现Web自动化测试--基于Selenium》 Selenium-RC

一. 简介 Selenium-RC可以适应更复杂的自动化测试需求&#xff0c;而不仅仅是简单的浏览器操作和线性执行。Selenium-RC能够充分利用编程语言来构建更复杂的自动化测试案例&#xff0c;例如读写文件、查询数据库和E-mail邮寄测试报告。 当测试案例遇到selenium-IDE不支持的逻辑…

python的所有知识点+代码+注释,不看就亏死了

目录 简介 特点 搭建开发环境 版本 hello world 注释 文件类型 变量 常量 数据类型 运算符和表达式 控制语句 数组相关 函数相关 字符串相关 文件处理 对象和类&#xff0c;注&#xff1a;不是那个对象&#xff01;&#xff01;&#xff01;&#xff01;&…

HTML创意动画代码

目录1、动态气泡背景2、创意文字3、旋转立方体1、动态气泡背景 <!DOCTYPE html> <html> <head><title>Bubble Background</title><style>body {margin: 0;padding: 0;height: 100vh;background: #222;display: flex;flex-direction: colum…

SpringCloud————Eureka概述及单机注册中心搭建

Spring Cloud Eureka是Netflix开发的注册发现组件&#xff0c;本身是一个基于REST的服务。提供注册与发现&#xff0c;同时还提供了负载均衡、故障转移等能力。 Eureka组件的三个角色 服务中心服务提供者服务消费者 Eureka Server&#xff1a;服务器端。提供服务的注册和发现…

kubernetes 1.26.1 Etcd部署(外接)保姆级教程

目录 部署etcd前期准备 机器信息 升级内核 系统配置 部署容器运行时Containerd 安装crictl客户端命令 配置服务器支持开启ipvs的前提条件 安装 kubeadm、kubelet 和 kubectl 安装部署etcd 1.将 kubelet 配置为 etcd 的服务管理器 2.为 kubeadm 创建配置文件 3. 生成…