DAY 36 文本处理命令awk

news2025/1/20 14:58:54

awk的概述

awk:

在 Linux/UNIX 系统中,awk 是一个功能强大的编辑工具,逐行读取输入文本, 默认以空格或tab键作为分隔符作为分隔,并按模式或者条件执行编辑命令

awk信息的读入也是逐行指定的匹配模式进行查找,对符合条件的内容进行格式化输出或者过滤处理,可以在无交互 的情况下实现相当复杂的文本操作,被广泛应用于 Shell 脚本,完成各种自动化配置任务

awk工作过程:

  1. 逐行读取文本,默认以空格或tab键为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令
  2. awk倾向于将一行分成多个"字段"然后再进行处理
  3. awk信息的读入也是逐行读取的,执行结果可以通过print的功能将字段数据打印显示
  4. 使用awk命令的过程中,可以使用逻辑操作符"&&"表示"与"、"|"表示"或"、"!"表示"非",还可以进行简单的数学运算,如+、-、*、/、%、^分别表示加、减、乘、除、取余和乘方

awk命令格式

awk 选项 '模式或条件 {操作}' 文件1 文件2 ....
 
或者
awk -f 脚本文件 文件1 文件2 .....

 

  • 注意一定是单引号:'模式或条件 {操作}'
  • { }外指定条件,{ }内指定操作。
  • 用逗号指定连续的行,用 || 指定不连续的行。&&表示”且“。
  • 内建变量,不能用双引号括起来,不然系统会把它当成字符串

awk常见的内置变量(可直接使用):

内置变量含义
$0当前处理的行的整行内容
$n当前处理行的第n个字段(第n列)
NR当前处理的行的行号(序数)
NF当前处理的行的字段个数。$NF代表最后一个字段
FS列分割符,指定每行文本的字段分隔符,默认为空格或制表位。与"-F"作用相同
OFS输出内容的列分隔符
FILENAME被处理的文件名
RS行分隔符,awk从文件中读取资料时,将根据RS的定义把资料切割成许多条记录, 而awk一次仅读入一条记录进行处理。预设值是"\n"

awk的基础用法

按行输出内容

 打印行号和整行内容

 使用NR指定行号

打印1到3行       ,表示连续的行内容, &&表示且

 注意符号"||"(表示“或“)

 打印奇数行;打印偶数行。(将行号除以2取余数,余1是奇数行,余0是偶数行)

 $n 表示当前处理行的第n个字段

 使用字符串处理行内容

 使用BEGIN输出包含指定字符的行并统计有多少行 

  • BEGIN模式表示,在处理指定的文本之前,需要先执行BEGIN模式中指定的动作
  • awk再处理指定的文本,之后再执行END模式中指定的动作
  • END{ } 语句块中,往往会放入打印结果等语句
awk 'BEGIN{x=0};/\/bash$/{x++};END {print x}' /etc/passwd
统计以/bin/bash 结尾的行数,等同于grep -c "/bash$"

  以:为行分隔符,进行统计行号

按字段(列)输出内容

指定列分隔符的两种方式:使用-F 或 使用内建变量FS

使用   -F指定分隔符

 把内建变量FS重新赋值

内建变量FS表示列分隔符,默认为空格或制表位。重新赋值可重新指定分隔符

 打印UID大于500的用户、大于UID小于等于500的用户(!取反)

要求打印用户名和UID

! 表示取反,不大于500,即小于等于500

  与if语句或者while或三目运算符等一起使用时需要再嵌套一个大括号{ }

三元运算符:
 
(条件表达式)?(A表达式或者值):(B表达式或者值)
 
条件表达式成立为真时会取:号前面的A的值
 
条件表达式不成立为假时会取:号后面的B的值

 三元运算符

 NF当前处理的行的字段个数

打印第一个字段与最后一个字段

 RS分隔符

 awk实例

查看内存使用率

 查看CPU空闲率

top -b -n 1 只会输出一次top的结果 不会进行刷新

 date命令

 以数字形式输出

[root@localhost ~]# date +"%F"
2022-04-24

  以年月日的形式输出

[root@localhost ~]# date +"%Y%m%d"
20220424

  输出当月的第一天

[root@localhost ~]# date +"%Y%m01"
20220401

 输出下一个月的第一天

[root@localhost ~]# date -d "$(date -d "1 month" +"%Y%m01")"
2022年 05月 01日 星期日 00:00:00 CST
[root@localhost ~]# date -d "$(date -d "1 month" +"%Y%m01")" +"%Y%m%d"
20220501

 输出本月的最后一天

[root@localhost ~]# date -d "$(date -d "1 month" +"%Y%m01") - 1 day" +"%Y%m%d"
20220430

  输出上个月的倒数第3天

[root@localhost ~]# date -d "$(date +"%Y%m01") - 3 day" +"%Y%m%d"
20220329

  输出服务器重启时间

[root@localhost ~]# date -d "$(awk -F. '{print $1}' /proc/uptime) second ago" +"%Y%m%d %H;%M;%S"
20220424 14;27;32

通过管道符处理其他命令的结果

统计行数

1.使用内置变量NR,打印最后一行行号

 2.使用 wc -l 统计行数

 使用 grep -c 统计匹配行的行数

 

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

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

相关文章

Unity ——使用贝塞尔曲线对三维管状物体进行弯曲

参考链接:【Unity】弹性鱼竿简单实现-通过贝塞尔曲线修改Mesh - 简书 参考论文:吴晓亮, 黄襄念. Unity 中使用贝塞尔曲线对三维物体进行弯曲[J]. 现代计算机, 2016 (5): 57-59. unity项目下载:https://download.csdn.net/download/weixin_4…

时间序列 | MATLAB实现CNN-GRU-Attention时间序列预测

时间序列 | MATLAB实现CNN-GRU-Attention时间序列预测 目录时间序列 | MATLAB实现CNN-GRU-Attention时间序列预测预测效果基本介绍模型描述程序设计参考资料预测效果 基本介绍 MATLAB实现CNN-GRU-Attention时间序列预测,CNN-GRU结合注意力机制时间序列预测。 模型描…

涨点技巧:卷积变体DCNV2引入Yolov8,助力小目标涨点

1.DCN V2介绍 DCN V2: Improved Deep & Cross Network and Practical Lessons for Web-scale Learning to Rank Systems 论文:https://arxiv.org/abs/2008.13535 作者通过在DCN的基础上,增加了2个创新点,分别是调制模块和使用多个调制后的DCN模块,从形成了DCN的升级版…

解码营养行业新趋势 2023晶球益生菌与肠内营养健康高峰论坛圆满落幕

后疫情时代,国人自身健康管理意识日益提高,越来越多的人认识到到微生物组、营养吸收与免疫健康的密切联系,并逐渐认可微生态和肠内营养在临床应用过程中的积极作用,使得营养治疗研究成果进一步落地转化。消费升级新时代&#xff0…

一文带你读懂,这三个交换机层级的区别和联系。

01 第二层交换机 OSI参考模型的第二层叫做数据链路层,第二层交换机通过链路层中的MAC地址实现不同端口间的数据交换。 第二层交换机主要功能,就包括物理编址、错误校验、帧序列以及数据流控制。 因为这是最基本的交换技术产品,目前桌面型交…

CDN到期不想续费?!MINIO救个场!

一、安装MINIO 下载 wget https://dl.min.io/server/minio/release/linux-amd64/archive/minio-20230413030807.0.0.x86_64.rpm -O minio.rpm 安装 yum install minio.rpm 二、启动 MinIO 服务器 创建启动实例目录 mkdir ~/minio 启动 MInIO实例 minio server ~/minio -…

解析hash(散列)数据结构

前言 在学习完map、set这两个由红黑树构成的容器后,我们来到了这里hash,首先我们要有一个基础的认知——哈希和map与set的仅在使用时的差别区别:前者内部的元素没有序,而后者有序,其它的都相同,这里我们可…

【C++进阶之路】第一篇:C++中的继承

🌟hello,各位读者大大们你们好呀🌟 🍭🍭系列专栏:【C学习与应用】 ✒️✒️本篇内容:继承的基础概念,定义方法,基类和派生类的转换,继承中类的作用域&#xf…

VSCode配置React Native调试环境

首先,用VSCode打开新建的react native工程,此时只能运行,是无法调试的。如果想单步调试代码,需要配置。 点击VSCode左边三角形菜单: 点击“创建launch.json文件”, 选择“React Native”调试器,…

肖 sir_就业课__011性能测试讲解

性能测试讲解 一、你做过性能测试吗? 方法1:做过 方法2:在公司中性能测试有专门的性能小组做,但是我也会做性能 二、性能测试有哪些类型? 1)压力测试(破坏性测试) 压力测试是系统在一…

WiFi协议曝安全漏洞:Linux、Android和iOS未能逃脱

来自美国东北大学和鲁汶大学的学者披露了一组IEEE 802.11 Wi-Fi协议标准的一个基础设计漏洞,影响到运行Linux、FreeBSD、Android和iOS的各种设备。 来自美国东北大学和鲁汶大学的学者披露了一组IEEE 802.11 Wi-Fi协议标准的一个基础设计漏洞,影响到运行L…

【C++核心】内存、引用、函数

一、内存四区域 C程序在执行时,将内存大方向划分为4个区域 程序运行前分为: 代码区:存放函数体的二进制代码exe,由操作系统进行管理的 exe机器指令、共享、只读 全局区:存放全局变量和静态变量以及常量(字…

运行时内存数据区之虚拟机栈——操作数栈

操作数栈 每一个独立的栈帧中除了包含局部变量表以外,还包含一个后进先出(Last-In-First-Out)的操作数栈,也可以称之为表达式栈(Expression Stack)。操作数栈,在方法执行过程中,根据字节码指令,往栈中写入数据或提取数…

Netty缓冲区ByteBuf源码解析

在网线传输中,字节是基本单位,NIO使用ByteBuffer作为Byte字节容器, 但是其使用过于复杂,因此Netty 写了一套Channel,代替了NIO的Channel ,Netty 缓冲区又采用了一套ByteBuffer代替了NIO 的ByteBuffer &…

微服务+springcloud+springcloud alibaba学习笔记【OpenFeign的使用】(5/9)

OpenFeign的使用 5/91、OpenFeign简介1.1、Feign及OpenFeign概念和作用1.2、Feign和OpenFeign区别2、OpenFeign使用步骤2.1、创建Feign消费端微服务2.2、修改POM文件配置2.3、编写yml配置文件2.4、编写主启动类2.5、编写业务类2.5.1、编写 service 层接口,用于服务提…

什么是线性回归?线性回归有什么特征?

什么是线性回归 线性回归定义与公式 线性回归(Linear regression)是利用回归方程(函数)对一个或多个自变量(特征值)和因变量(目标值)之间关系进行建模的一种分析方式。 特点:只有一个自变量的情况称为单变量回归,多于一个自变量情况的叫做多元回归 线…

Orange Pi 5B面世,传承经典,再续传奇

近日,香橙派又出大招。刚刚发布的Orange Pi 5B在性能和表现上再度升级。此前,Orange Pi 5凭借出色的性能和极低的价格被誉为“地表最高性价比开发板”,一经上市就引起市场轰动,销量引领同类产品市场,获得极佳口碑。那么…

【音视频第13天】另外一种拥塞控制算法-TransportCC

目录与Goog-REMB区别TrendLine滤波器与Goog-REMB区别 与Goog-REMB有两个区别: 将拥塞评估算法从接收端移动到了发送端,评估和控制是一体的。TransportCC是发送端评估发送端接着改变码率,REMB是接收端评估,把评估出来的值给发送端…

STL源码剖析-分配器 Allocator

分配器(Allocator) 分配器给容器用的,是一个幕后英雄的角色。分配器的效率非常重要。因为容器必然会使用到分配器来负责内存的分配,它的性能至关重要。 在C中,内存分配和操作通过new和delete完成。 new中包含两个操作,第一步是…

HTML5 Input 类型

文章目录HTML5 Input 类型Input 类型: colorInput 类型: dateInput 类型: datetimeInput 类型: datetime-localInput 类型: emailInput 类型: monthInput 类型: numberInput 类型: rangeInput 类型: searchInput 类型: telInput 类型: timeInput 类型: urlInput 类型: weekHTML…