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. 商用构件的标准规范 当前,主流的商用构件标准规范包括对象管理组织ÿ…...
cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...
Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云
目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...
C++.OpenGL (20/64)混合(Blending)
混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...
RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill
视觉语言模型(Vision-Language Models, VLMs),为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展,机器人仍难以胜任复杂的长时程任务(如家具装配),主要受限于人…...
保姆级【快数学会Android端“动画“】+ 实现补间动画和逐帧动画!!!
目录 补间动画 1.创建资源文件夹 2.设置文件夹类型 3.创建.xml文件 4.样式设计 5.动画设置 6.动画的实现 内容拓展 7.在原基础上继续添加.xml文件 8.xml代码编写 (1)rotate_anim (2)scale_anim (3)translate_anim 9.MainActivity.java代码汇总 10.效果展示 逐帧…...
