awk命令的使用
1.概念:
-
awk是Linux以及UNIX环境中现有的功能最强大的数据处理工具
-
awk是一种处理文本数据的编程语言。awk的设计使得它非常适合于处理由行和列组成的文本数据
-
awk程序可以读取文本文件,对数据进行排序,对其中的数值执行计算以及生成报表等
2.awk的工作流程:
-
awk命令的基本语法如下:
awk 'pattern {actions}'
参数 说明 -F 指定分隔符 -f 调用脚本 -v 定义变量 ' '中的特字符 说明 BEGIN 初始化代码块 {} 命令代码块 ; 多条命令使用分号分隔 END END -
在上面的语法中,pattern表示匹配模式,actions表示要执行的操作
-
当某个文本行符合pattern指定的匹配规则时,执行actions所执行的操作
-
在上面的语法中,pattern和actions都是可选的,但是两者必须保证至少有一个。
-
如果省略匹配模式pattern,则表示对所有的文本行执行actions所表示的操作;
-
如果省略actions,则表示将匹配成功的行输出到屏幕。
-
-
在awk处理数据时,它会反复执行以下4个步骤:
-
自动从指定的数据文件中读取行文本。
-
自动更新awk的内置系统变量的值,例如列数变量NF、行数变量NR、行变量$0以及各个列变量$1、$2等等。
-
依次执行程序中所有的匹配模式及其操作。
-
当执行完程序中所有的匹配模式及其操作之后,如果数据文件中仍然还有未读取的数据行,则返回到第(1)步,重复执行(1)~(4)的操作。
-
3.awk程序执行方式:
-
通过命令行执行awk程序,语法如下:
awk 'program-text' [要处理的文本文件] 例:awk '{print $0}' /etc/passwd
-
执行awk脚本
awk -f [脚本名] [要处理的文本文件]
-
可执行脚本文件
#!/bin/awk -f # 以上语句必须位于脚本文件的第一行。然后用户就可以通过以下命令执行awk程序: awk-script file # 其中,awk-script为awk脚本文件名称,file为要处理的文本数据文件。
4.awk的输出:
-
print的使用格式:
# 使用逗号隔开,表示不同内容 # 输出的item可以为字符串或数值、当前记录的字段(如$1)、变量或awk的表达式;数值会先转换为字符串,而后再输出; # print命令后面的item可以省略,此时其功能相当于print $0
-
printf命令的使用格式:实现字符串的格式化
printf(format, [arguments]) # format是一个用来描述输出格式的字符串 # arguments为一个参数列表,表示用来显示的数据,可以是变量名等,多个参数之间用逗号隔开 # printf语句不会自动打印换行符
format格式的指示符 说明 format格式的指示符 说明 %c 显示字符的ASCII码 %d, %i 十进制整数 %f 显示浮点数 %e, %E 科学计数法显示数值 %s 显示字符串 %g, %G 以科学计数法的格式或浮点数的格式显示数值 %u 无符号整数 %% 显示%自身; N 显示宽度 - 左对齐 + 显示数值符号 -
输出重定向:
print items > output-file print items >> output-file print items | command
5.awk的变量:
-
awk的变量名只能包括字母、数字和下划线,并且不能以数字开头。
-
awk内置变量
变量 说明 $0 记录变量,表示当前正在处理的记录 $n 字段变量,其中n为整数,且n大于1。表示第n个字段的值 NF 整数值,表示当前记录(变量$0所代表的记录)的字段数,如:'how they are',NF=3 NR 整数值,表示awk已经读入的记录数;如果有多个文件,这个数目会把处理的多个文件中行统一计数。(显示的是文件的每一行的行号) FNR 与NR不同的是,FNR用于记录正处理的行是当前这一文件中被总共处理的行数; FILENAME 表示正在处理的数据文件的名称 FS 输入字段分隔符,默认值是空格或者制表符,可使用-F指定分隔符 OFS 输出字段分隔符 ,OFS=”#”指定输出分割符为#。 RS 记录分隔符,默认值是换行符 \n ENVIRON 当前shell环境变量及其值的关联数组; [root@quruixiang ~]# echo -e "1 2 3\n4 5 6" | awk '{print $0}' 1 2 3 4 5 6
[root@quruixiang ~]# echo -e "1 2 3\n4 5 6" | awk '{print $1}' 1 4
[root@quruixiang ~]# echo -e "1 2 3\n4 5 6" | awk '{print NF}' 3 3
[root@quruixiang ~]# awk '{print FILENAME}' /etc/passwd
-
用户自定义变量:
-
在awk中给变量赋值使用赋值语句进行
[root@localhost ~]# awk 'BEGIN{test="hello";print test}' hello
-
在命令行中使用赋值变量
[root@localhost ~]# awk -v test="hello" 'BEGIN {print test}' hello
-
6.操作符:
-
awk是一种编程语言环境,因此,它也支持常用的运算符以及表达式,例如算术运算、逻辑运算以及关系运算等。
-
awk支持常用的算术运算,这一点与其他的程序设计语言基本相同。
运算符 说明 举例 + 加法运算 1+2表示计算1和2的和 - 减法运算 82-2表示计算82和2的差 * 乘法运算 2*5表示计算2和5的积 / 除法运算 6/3表示计算6和2的商 % 求模运算 5/2表示计算5除以2的余数 ^ 指数运算 2^3表示计算2的3次方 [root@localhost ~]# awk 'BEGIN{x=2;y=3;print x**y,x^y,x*y,x/y,x+y,x-y,x%y}' 8 8 6 0.666667 5 -1 2
[root@localhost ~]# awk '{max=$1>$2?$1:$2;print NR,"max=",max}' file 1 max= 6 2 max= 10 3 max= 3
-
关系运算符:
运算符 说明 举例 ~ 匹配运算符 $1 ~ /^T/表示匹配第一个字段以字符T开头的记录 !~ 不匹配运算符 $1 !~ /a/表示匹配第一个字段不含有字符a的记录 [root@localhost test11]# awk '$1~/^w/ {print}' file wangmei 70
7.awk的模式:
-
awk的基本语法:
awk [options] 'PATTERN { action }' file1 file2, ...
-
在awk中,匹配模式处于非常重要的地位,它决定着匹配模式后面的操作会影响到哪些文本行
-
awk中的匹配模式主要包括关系表达式、正则表达式、混合模式,BEGIN模式以及END模式等。
-
关系表达式:
[root@localhost test11]# awk '$2 > 80 {print}' file zhangsan 90 lisi 81
-
正则表达式:
[root@localhost test11]# awk '/^l|z/{print}' file liming 80 zhangsan 90 lisi 81
-
混合模式:
[root@localhost test11]# awk '/^l/ && $2>80 {print}' file lisi 81
-
区间模式:
[root@localhost test11]# awk '/^liming/,$2==90 {print}' file liming 80 wangmei 70 zhangsan 90
-
BEGIN模式:
# BEGIN模式是一种特殊的内置模式,只执行一次并且执行在主体代码块和读取数据之前 # 可以抛开文件单独执行,结果类似于echo而END不可以
-
END模式:
# END模式是awk的另外一种特殊模式,只执行一次并且执行在主体代码块和读取数据之后 [root@quruixiang logs]# awk '{nums[$1]+=1;} END{for(i in nums){print nums[i],i}}' access_log
8.awk控制语句:
-
if语句的功能是根据用户指定的条件来决定执行程序的哪个分支,其语法如下:
if (expression) {statement1statement2 }else{statement3statement4 }
-
swith语句:
swith(data){case value1: statement1case value2: statement2default: statement3 }
-
while语句是另外一种常用的循环结构,其语法如下:
[root@quruixiang ~]# echo " " | awk 'BEGIN{i=1;while(i<11){print i;i++}}'
-
awk还支持另外一种while循环语句,其语法如下:
[root@quruixiang ~]# echo " " | awk 'BEGIN{i=1;do{print i;i++}while(i<11)}'
-
for循环语句通常用在循环次数已知的场合中,其语法如下:
[root@quruixiang ~]# echo " " | awk 'BEGIN{for(i=1;i<11;i++){print i}}'
# 分析httpd的access_log 1)获取访问前10位的ip地址 awk '{nums[$1]+=1;} END{for(i in nums){print nums[i],i}}' access_log
-
break语句和continue语句
[root@quruixiang ~]# echo "" | awk 'BEGIN{for(i=1;i<11;i++){if(i==5){continue}else{print i}}}'
-
next语句(java中的return)
# 如果遇到next语句,则提前结束对本行文本的处理,awk会继续读取下一行数据,并且从第一个模式及其操作开始执行。
-
exit语句,exit语句的功能是终止awk程序的执行
10.awk内置函数:
-
split(string, array [, fieldsep [, seps ] ]):
# 将string表示的字符串以fieldsep为分隔符进行分隔,并将分隔后的结果保存至array为名的数组中;数组下标为从1开始的序列;
-
length([string])
# 功能:返回string字符串中字符的个数;
-
substr(string, start [, length])
# 功能:取string字符串中的子串,从start开始,取length个;start从1开始计数;
-
system(command)
# 功能:执行系统command并将结果返回至awk命令
-
systime()
# 功能:取系统当前时间
-
tolower(s)
# 功能:将s中的所有字母转为小写
-
toupper(s)
# 功能:将s中的所有字母转为大写
11.awk案例:
-
获取当前内存的内存总容量
awk '/^MemTotal:/ {print $2}' /proc/meminfo
相关文章:
awk命令的使用
1.概念: awk是Linux以及UNIX环境中现有的功能最强大的数据处理工具 awk是一种处理文本数据的编程语言。awk的设计使得它非常适合于处理由行和列组成的文本数据 awk程序可以读取文本文件,对数据进行排序,对其中的数值执行计算以及生成报表等…...

【面试系列】Vue
引言:下面是一些常见的 Vue 面试题和对应的答案 目录 1. Vue 是什么?它有哪些特点?2. Vue 的生命周期有哪些?请简要描述每个生命周期的作用。3. Vue 组件间通信的有哪些方式?4. Vue 的 computed 和 watch 的区别是什么…...

揭开MyBatis的神秘面纱:掌握动态代理在底层实现中的精髓
一日小区漫步,我问朋友:Mybatis中声明一个interface接口,没有编写任何实现类,Mybatis就能返回接口实例,并调用接口方法返回数据库数据,你知道为什么不? 朋友很是诧异:是啊ÿ…...
结合领域驱动设计,理解TOGAF之架构方法论
TOGAF(The Open Group Architecture Framework)是一个开放的架构方法论,旨在支持组织制定和实施企业架构。它提供了一种框架来创建和管理企业架构,并包含了一组最佳实践,帮助组织实现其业务目标。 TOGAF框架包括四个主…...

Vue-vue项目Element-UI 表单组件内容要求判断
整体添加判断 <el-formref"ruleFormRef":model"formModel"class"demo-ruleForm"label-position"top"status-icon:rules"rules"><el-form-item label"姓名" prop"applyUsers" class"form-…...

【试题027】C语言宏定义小例题
1.题目: #define MOD(a,b) a%b int main() { int x4,y16,z; zMOD(y,x); printf("%dn".z);} 则程序执行的结果是? 2.代码分析: #include <stdio.h> #define MOD(a,b) a%b int main() {int x 4, y 16, z;z MOD(y, …...

解决 sharp: Installation error: unable to verify the first certificate
使用 plasmo 时报错如下: E:\chromeplugins>pnpm create plasmo ../.pnpm-store/v3/tmp/dlx-46852 | 2 ../.pnpm-store/v3/tmp/dlx-46852 | Progress: resolved 2, reused 2, downloaded 0, added 2, done 🟣 Plasmo v0.83.0 &…...
【Java】Java实现100万+ 的高并发、高性能设计
Java实现100万 的高并发、高性能设计 1、简述 现百万级并发编是一项综合性的技术,同时,它与现实生活中 的场景有着紧密的联系。 搞懂并发编程有三大核心问题 分工问题 同步问题 互斥问题 本文就对这三大核心问题进行简单的介绍 2、分工问题 关于分工…...
linux系统下,在vscode的命令行中调试python文件
首先参考vscode官网文档Command line debugging 步骤 1(只需一次):安装debugpy 步骤 2:在命令行中运行 python -m debugpy --listen 5678 --wait-for-client -m dir1.dir2.your_script 以上命令使用了端口5678,也可…...

DFS(分布式文件系统)与 DFSR(分布式文件系统复制)的区别
DFS(分布式文件系统)和 DFSR(分布式文件系统复制)是两种不同的技术,尽管它们在名称上有一些相似之处,但它们的用途和功能有所不同。 DFS(分布式文件系统) DFS 是一种用于创建和管理…...

丈母娘说:有编制的不如搞编程的
10月17日百度世界大会召开,据说文心大模型又牛X了,综合水平相比GPT4毫不逊色,真是个让人激动的消息,国产大模型的进展可以说是日新月异,我这耳朵边一直响彻四个字:遥遥领先。 不过今天我关注的重点不是什么…...
vue 部署后 405 not allowed
关于部署vue项目dist包,在nginx配置遇到的坑: 1.vue项目中vue.config.js的配置:devServer.proxy 可以是一个指向开发环境 API 服务器的字符串: evServer: {proxy: {/prod-api: {target: http://192.168.0.68:38090;,changeOrigi…...
【限时免费】20天拿下华为OD笔试之【回溯】2023Q1-硬件产品销售方案【欧弟算法】全网注释最详细分类最全的华为OD真题题解
【回溯】2023Q1-硬件产品销售方案 题目描述与示例 题目描述 某公司目前推出了 AI 开发者套件、AI 加速卡、AI 加速模块、AI 服务器、智能边缘多种硬件产品,每种产品包含若干个型号。现某合作厂商要采购金额为 amount 元的硬件产品搭建自己的 AI 基座。假设当前库…...

蜻蜓c影视追剧系统-多个小程序添加说明
多小程序添加设置 蜻蜓c影视追剧 支持多小程序添加,也就是可以管理不同前端的小程序。 此处id 对应前端小程序的mp值 关于添加小程序: 此处有所有填写内容的参考方式,要注意是必须开通了微信支付才可以添加,这里需要添加证书信息…...
linux 测试存储介质.emmc.nand.ufs.硬盘的读写速度方法
一、测试写速度 创建一个test.sh脚本 #!bin/bashcnt1 while [ $cnt -lt 50 ] // 循环50次 doecho "dd cnt $cnt" > /dev/consoledd if/dev/zero of/rawdata/test_${cnt}.txt bs1024 count102400//往储存介质分配的一个rawdata分区,写文件࿰…...

基于 KubeSphere 部署 KubeBlocks 实现数据库自由
作者:尹珉, KubeSphere Contributor & Ambassador,KubeSphere 社区用户委员会杭州站站长。 KubeSphere 是什么? KubeSphere 是在 Kubernetes 之上构建的面向云原生应用的分布式操作系统,完全开源,支持…...

图像识别-人脸识别与疲劳检测 - python opencv 计算机竞赛
文章目录 0 前言1 课题背景2 Dlib人脸识别2.1 简介2.2 Dlib优点2.3 相关代码2.4 人脸数据库2.5 人脸录入加识别效果 3 疲劳检测算法3.1 眼睛检测算法3.3 点头检测算法 4 PyQt54.1 简介4.2相关界面代码 5 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是…...

高性能计算与多模态处理的探索之旅:英伟达GH200性能优化与GPT-4V的算力加速未来
★多模态大模型;GPU算力;LLMS;LLM;LMM;GPT-4V;GH200;图像识别;目标定位;图像描述;视觉问答;视觉对话;英伟达;Nvidia&#…...
代码随想录算法训练营Day59|动态规划17
代码随想录算法训练营Day59|动态规划17 文章目录 代码随想录算法训练营Day59|动态规划17一、647. 回文子串二、516.最长回文子序列 一、647. 回文子串 class Solution {public int countSubstrings(String s) {boolean[][] dp new boolean[s.length()][s.length()];int res …...
软考 系统架构设计师系列知识点之软件构件(2)
接前一篇文章:软考 系统架构设计师系列知识点之软件构件(1) 所属章节: 第2章. 计算机系统基础知识 第3节. 计算机软件 2.3.7 软件构件 3. 商用构件的标准规范 当前,主流的商用构件标准规范包括对象管理组织ÿ…...

手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

用机器学习破解新能源领域的“弃风”难题
音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...
NPOI Excel用OLE对象的形式插入文件附件以及插入图片
static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...

解析“道作为序位生成器”的核心原理
解析“道作为序位生成器”的核心原理 以下完整展开道函数的零点调控机制,重点解析"道作为序位生成器"的核心原理与实现框架: 一、道函数的零点调控机制 1. 道作为序位生成器 道在认知坐标系$(x_{\text{物}}, y_{\text{意}}, z_{\text{文}}…...