文本三剑客之——Awk

Awk

  • Awk简介
    • Awk语法格式
    • Awk常见内置变量
    • Awk实例演示
      • 按行输出文本
      • BEGIN模式和END模式
      • 按字段输出文本
      • 通过管道,双引号调用shell命令
      • date 的用法
      • getline的用法
      • awk数组

Awk简介

  • Awk是一个功能强大的编辑工具,用于在Linux/UNIX 下对文本和数据进行处理。
  • 数据可以来自一个或多个文件,也可以为其他命令的输出,常作为脚本来使用。
  • 在执行操作时,Awk逐行读取文本,默认以空格为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,对比该行是否与给定的模式相匹配,并按模式或者条件执行编辑命令,也可从脚本中调用编辑指令过滤输出相应内容。
  • sed命令常用于一整行的处理,而awk比较倾向于将一行分成多个“字段”然后再进行处理。awk信息的读入也是逐行读取的,执行结果可以通过print的功能将字段数据打印显示。在使用awk命令的过程中,可以使用逻辑操作符“&&”表示“与”、“||”表示“或”、“!”表示“非”;还可以进行简单的数学运算,如+、-、*、/、%、^分别表示加、减、乘、除、取余和乘方。

Awk语法格式

  • 第一种:awk 【选项】 ‘模式或条件 {编辑指令}’ 文件1 文件2

  • 第二种:awk -f 脚本文件 文件1 文件2

  • awk -F"分隔符" ‘条件 {print $0, 2 , 2, 2,NF}’ 文件。。。

  • 条件:按行号 NR==xx,(>,>=,<,<=,) 也可以使用 (&& 与 , || 或, !非。)

  • 按内容 /字符串/ 或 /正则表达式/ 或$n==”字符串“,

    • !=:不等于
    • ~:包括
    • !~:不包括
    • <,<=,>,>=,!=,分别为小于,小于等于,大于,大于等于,不等于。

在Awk语句中,模式部分决定何时对数据进行操作,若省略则后续动作时刻保持执行状态,模式可以为条件语句、复合语句或正则表达式等。每条编辑指令可以包含多条语句,多条语句之间要使用分号或者空格分隔的的多个{}区域。常用选项 -F 定义字段分隔符,默认以空格或者制表符作为分隔符。

Awk常见内置变量

Awk提供了很多内置变量,经常用于从处理文本。

变量描述
FS指定每行文本的字段分隔符
NF当前处理的行的字段个数
NR当前处理的行的行号(序数)
$0当前处理的行的整行内容
$n当前处理行的第n个字段(第n列)
FILENAME被处理的文件名
RS行分隔符。awk从文件上读取资料时,将根据RS的定义把资料切割成许多条记录,而awk一次仅读入一条记录,以进行处理。预设值是’\n’

Awk实例演示

按行输出文本

awk ’{print $0}‘ 或 awk ‘{print}’ ##全行输出
在这里插入图片描述
awk ‘NR==a{print}’##输出指定行a
awk 'NR=='a,NR==b{print} ##指定输出行a到行b之间的所有行
awk ‘NR==a || NR==b{print}’ ##指定输出行a和行b
在这里插入图片描述
awk ‘(NR%2)==1{print}’ ##输出所有奇数行的内容
awk ‘(NR%2)==0{print}’ ##输出所有偶数行的内容
在这里插入图片描述
awk ‘/字符串/{print}’ ##输出所有包含字符串的行
awk ‘/正则表达式/{print}’ ##输出所有正则匹配到的行
在这里插入图片描述

BEGIN模式和END模式

BEGIN模式:在处理指定文本之前,需要先执行BEGIN模式中指定的动作;awk在处理指定的文本,之后再执行END模式中指定的动作,END{}语句块中,往往会放入打印结果等语句。
例:
利用awk统计passwd文件中以/bin/bash结尾的行数。
awk ‘BEGIN {a=0};//bin/bash$/ {a++};END {print a}’ /etc/passwd
在这里插入图片描述

按字段输出文本

awk -F: ‘{print $1}’ ##-F设置分割符为:然后输出第一列内容
在这里插入图片描述
awk -F: ‘{print $1,$3}’ ##-F设置分割符为:然后输出第一列和第三列内容

在这里插入图片描述

awk -F “:” ‘$3<5{print $1,$3}’ /etc/passwd #输出第3个字段的值小于5的第1、3个字段内容
在这里插入图片描述

awk -F “:” ‘!($3>8){print}’ /etc/passwd #输出第3个字段的值不大于8的行
在这里插入图片描述
分隔符的另一种设置方式:BEGIN {FS=字符},用 if 语句进行条件判断时需要再外边在加一个大括号{}
在这里插入图片描述

awk ‘{三元运算符表达式;{操作}}’ ##awk也可以使用三元表达式

三元运算符表达式:条件表达式?值1:值2;##满足条件表达式取值1不满足则取值2
在这里插入图片描述

awk -F “:” ‘{print NR,$0}’ ##输出每行内容和行号,每处理完一条记录,NR值加1
在这里插入图片描述

awk -F: ‘$7~“bash” {print}’ ##输出第七列包含bash字符串的行
在这里插入图片描述

NF表示本行长度,再第一列中包含root字符&&同时NF==7表示长度为7,满足要求的行输出
在这里插入图片描述

通过管道,双引号调用shell命令

RS可以修改行分隔符
在这里插入图片描述
{print | “wc -l”} ##管道命令可以加到大括号里面,要加双引号
在这里插入图片描述
在这里插入图片描述

计算当前内存使用百分比
在这里插入图片描述

查看当前Cpu空闲率
在这里插入图片描述

date 的用法

date -d 指计算日期
month 控制月 1就是加一月 -1就是减一月
day 控制天 同month
在这里插入图片描述

getline的用法

当getline左右有重定向符“<”或“|”时,getline表示将传过来的内容进行分行,可以让awk每一行的去读取操作。

在这里插入图片描述
在这里插入图片描述
当getline左右无重定向符“<”或“|”时,awk首先读取到了第一行,就是1,然后getline,就得到了1下面的第二行,就是2,因为getline之后,awk会改变对应的NF,NR,FNR和$0等内部变量,所以此时的$0的值就不再是1,而是2了,然后将它打印出来。

在这里插入图片描述

NR与FNR的区别
在这里插入图片描述
OFS
$1=$1 是用来激活$0的重新赋值,也就是说 字段$1…和字段数NF的改变会促使awk重新计算$0的值,通常是在改变OFS后而需要输出$0时这样做
在没重新赋值前$0没有变化

在这里插入图片描述

awk数组

PS1:BEGIN中的命令只执行一次
PS2:awk数组的下标除了可以使用数字,也可以使用字符串,字符串需要使用双引号

在这里插入图片描述

用awk数组去重
在这里插入图片描述
每一行字符串都定义为一个下标每次执行到相同字符串的行下标的值就会+1这样就可以知道有多少重行了

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ChatGPT vs. Bing vs. Bard

随着 2022 年 ChatGTP 的推出&#xff0c;人工智能聊天机器人的世界突然走上了一条新道路。如今&#xff0c;密切关注 AI 的人都知道&#xff0c;不同公司推出了几款产品。从谷歌拥有自己的 Bard AI&#xff0c;到微软发布新的 Bing AI Chat&#xff0c;再到 OpenAI 发布GPT-4。…

用gost实现远程端口映射

gost 是一个非常优秀的tunnel. 支持多种形式的端口映射。 本文只介绍远程端口映射方式的tunnel. 远程端口映射的意思就是&#xff0c;将本地端的某个服务的端口A&#xff08;tcp/udp&#xff09;映射到远程的某个端口P上&#xff0c; 用户通过访问远程的端口P来访问本地端的这…

生态碳汇涡度通量数据分析

生态碳汇涡度相关监测与通量数据分析 朱老师&#xff08;副教授&#xff09;&#xff1a;来自国内重点高校&#xff0c;长期从事涡度通量观测与分析研究&#xff0c;发表SCI论文多篇&#xff0c;主持国家与地方科研项目多个&#xff0c;在生态环境数据处理与分析中具有丰富的实…

Fourier分析入门——第3章——离散函数的Fourier分析

目录 第 3 章 离散函数的Fourier分析 3.1 引言 3.2 在1点采样的函数 3.3 在2点采样的函数 3.4 Fourier分析是一种线性变换 3.5 Fourier分析是一种基向量的变更 3.6 在3点采样的函数 3.7 在D点采样的函数 3.8 整理(tidying up) 3.9 Parseval[p:zeifa:l]定理 3.10 关联…

【LeetCode】203,移除链表元素。 难度等级:简单。链表入门题目,值得深入研究。

文章目录 一、题目二、解答&#xff1a;迭代法&#xff0c;引入一个新的头结点三、难点解释 【LeetCode】203&#xff0c;移除链表元素。 难度等级&#xff1a;简单。 本题是链表入门题目&#xff0c;值得深入研究。 一、题目 二、解答&#xff1a;迭代法&#xff0c;引入一个…

Spring实现IOC和DI入门案例(XML版)

文章目录 1 IOC入门案例(XML版)1.1 思路分析1.2 代码实现步骤1:创建Maven项目步骤2:添加Spring的依赖jar包步骤3:添加案例中需要的类步骤4:添加spring配置文件步骤5:在配置文件中完成bean的配置步骤6:获取IOC容器步骤7:从容器中获取对象进行方法调用步骤8:运行程序 2 DI入门案例…

【差分+操作】C. Helping the Nature

Problem - 1700C - Codeforces 题意&#xff1a; 思路&#xff1a; 一开始手玩了一下 如果不是高低高的形式&#xff0c;那么一定不能通过操作3把全部元素变成0 因此就是先把所有元素变成高低高的形式 但是低在什么地方不确定 因此考虑枚举中间低谷位置&#xff0c;O(1)计…

ShardingSphere-JDBC整合SpringBoot JPA读写分离失败

问题 最近在整合ShardingSphere JDBC和Spring Boot的时候遇到一个问题,当ORM框架使用JPA时,读写分离会失效,查询仍然走主库并不会走从库!同样的配置使用Mybatis就没有任何问题。 在查阅各种资料后,初步确定未JPA事务问题 ShardingSphere负载均衡算法 我当前使用的版本是…

【历史上的今天】4 月 23 日:YouTube 上传第一个视频;数字音频播放器的发明者出生

整理 | 王启隆 透过「历史上的今天」&#xff0c;从过去看未来&#xff0c;从现在亦可以改变未来。 今天是 2023 年 4 月 23 日&#xff0c;世界读书日。在 1564 年的这一天&#xff0c;全世界最卓越的文学家之一莎士比亚出生&#xff1b;1616 年的这一天&#xff0c;莎士比亚…

shell脚本5数组

文章目录 数组1 数组定义方法2 获取数组长度2.1 读取数组值2.2 数组切片2.3 数组替换2.4 数组删除2.5 追加数组元素 3 实验3.1 冒泡法3.2 直接选择法3.3 反排序法 数组 1 数组定义方法 数组名(value0 valuel value2 …) 数组名( [0]value [1]value [2]value …) 列表名“val…

现在的00后,实在是太卷了,我们这些老油条都想辞职了......

现在的小年轻真的卷得过分了。前段时间我们公司来了个00年的&#xff0c;工作没两年&#xff0c;跳槽到我们公司起薪20K&#xff0c;都快要超过我了。 后来才知道人家是个卷王&#xff0c;从早干到晚就差搬张床到工位睡觉了。 最近和他聊了一次天&#xff0c;原来这位小老弟家…

真题详解(传引用)-软件设计(七十五)

真题详解&#xff08;补码转换&#xff09;-软件设计&#xff08;七十四)https://blog.csdn.net/ke1ying/article/details/130674214 分治算法技术设计______。 答案&#xff1a;1、问题划分 2、递归求解 3、合并解 虚拟存储体系_____两级构成。 解析&#xff1a;主存 和 辅…

linux环境安装使用tomcat详解

01-安装Tomcat # 0.下载tomcat http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.46/bin/apache-tomcat-8.5.46.tar.gz # 1.通过工具上传到Linux系统中 # 2.解压缩到/usr目录中 [rootlocalhost ~]# tar -zxvf apache-tomcat-8.5.46.tar.gz -C /usr/ -C 用来指…

【AI绘图 丨 Midjourney 系列教程二】— 初识超火的AI绘画神器Midjourney

今天起&#xff0c;由 Midjourney 打头阵&#xff0c;让我们开始共同探索一系列的 AI 领域革命性作品&#xff0c;包括 Midjourney、Stable Diffusion、ChatGPT 等等&#xff0c;学习这些新时代的魔法和它的咒语。 写在前面 官方文档是最好的入门课程。相较于市面上琳琅满目的…

《计算机网络—自顶向下方法》 Wireshark实验(七):以太网与ARP协议分析

1 以太网 1.1 介绍 以太网是现实世界中最普遍的一种计算机网络。以太网有两类&#xff1a;第一类是经典以太网&#xff0c;第二类是交换式以太网&#xff0c;使用了一种称为交换机的设备连接不同的计算机。 经典以太网&#xff1a;是以太网的原始形式&#xff0c;运行速度从 …

信创办公–基于WPS的EXCEL最佳实践系列 (宏的录制)

信创办公–基于WPS的EXCEL最佳实践系列 &#xff08;宏的录制&#xff09; 目录 应用背景操作步骤1、宏的录制启用2、宏的使用3、宏的保存4、宏的禁用 应用背景 宏是一个自动化完成重复性工作的工具&#xff0c;使用宏可以提高我们的工作效率&#xff0c;那应该怎样使用宏这一…

ArcSWAT报错:Error Number :-2147467259; 对 COM 组件的调用返回了错误 HRESULT E_FAIL

文章目录 1 报错内容2 报错解决3 并行处理的设置补充说明 1 报错内容 通常为连续两段报错&#xff1a; Error Number :-2147467259 Error Message :对 COM 组件的调用返回了错误 HRESULT E_FAIL 。 Module name : mSWFlow Function name : createStream Procedure ( error li…

chatgpt赋能Python-python3_5如何安装

Python3.5安装指南 Python是一种高级编程语言&#xff0c;它广泛用于Web开发、数据分析、机器学习等领域。在Python的众多版本中&#xff0c;Python3.5是最常用的版本之一。如果你正在考虑学习Python3.5或者需要使用Python3.5进行项目开发&#xff0c;那么接下来的安装指南将会…

第十三章 使用DHCP动态管理主机地址

文章目录 第十三章 使用DHCP动态管理主机地址一、动态主机地址管理协议1、DHCP简介2、DHCP常见术语 二、部署DHCP服务程序1、安装DHCP服务程序2、配置文件参考模板3、dhcpd服务程序配置文件中常见参数及作用 三、自动管理IP地址1、机房所用的网络地址以及参数信息2、关闭虚拟网…

Flink从入门到精通之-10容错机制

Flink从入门到精通之-10容错机制 流式数据连续不断地到来&#xff0c;无休无止&#xff1b;所以流处理程序也是持续运行的&#xff0c;并没有一个明确的结束退出时间。机器运行程序&#xff0c;996 起来当然比人要容易得多&#xff0c;不过希望“永远运行”也是不切实际的。因…