当前位置: 首页 > news >正文

awk命令的使用

1.概念:

  • awk是Linux以及UNIX环境中现有的功能最强大的数据处理工具

  • awk是一种处理文本数据的编程语言。awk的设计使得它非常适合于处理由行和列组成的文本数据

  • awk程序可以读取文本文件,对数据进行排序,对其中的数值执行计算以及生成报表

2.awk的工作流程:

  • awk命令的基本语法如下:

    awk 'pattern {actions}'
    参数说明
    -F指定分隔符
    -f调用脚本
    -v定义变量
    ' '中的特字符说明
    BEGIN初始化代码块
    {}命令代码块
    ;多条命令使用分号分隔
    ENDEND

  • 在上面的语法中,pattern表示匹配模式,actions表示要执行的操作

  • 当某个文本行符合pattern指定的匹配规则时,执行actions所执行的操作

  • 在上面的语法中,pattern和actions都是可选的,但是两者必须保证至少有一个。

    • 如果省略匹配模式pattern,则表示对所有的文本行执行actions所表示的操作;

    • 如果省略actions,则表示将匹配成功的行输出到屏幕。

  • 在awk处理数据时,它会反复执行以下4个步骤:

    1. 自动从指定的数据文件中读取行文本。

    2. 自动更新awk的内置系统变量的值,例如列数变量NF、行数变量NR、行变量$0以及各个列变量$1、$2等等。

    3. 依次执行程序中所有的匹配模式及其操作。

    4. 当执行完程序中所有的匹配模式及其操作之后,如果数据文件中仍然还有未读取的数据行,则返回到第(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.概念&#xff1a; awk是Linux以及UNIX环境中现有的功能最强大的数据处理工具 awk是一种处理文本数据的编程语言。awk的设计使得它非常适合于处理由行和列组成的文本数据 awk程序可以读取文本文件&#xff0c;对数据进行排序&#xff0c;对其中的数值执行计算以及生成报表等…...

【面试系列】Vue

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

揭开MyBatis的神秘面纱:掌握动态代理在底层实现中的精髓

一日小区漫步&#xff0c;我问朋友&#xff1a;Mybatis中声明一个interface接口&#xff0c;没有编写任何实现类&#xff0c;Mybatis就能返回接口实例&#xff0c;并调用接口方法返回数据库数据&#xff0c;你知道为什么不&#xff1f; 朋友很是诧异&#xff1a;是啊&#xff…...

结合领域驱动设计,理解TOGAF之架构方法论

TOGAF&#xff08;The Open Group Architecture Framework&#xff09;是一个开放的架构方法论&#xff0c;旨在支持组织制定和实施企业架构。它提供了一种框架来创建和管理企业架构&#xff0c;并包含了一组最佳实践&#xff0c;帮助组织实现其业务目标。 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.题目&#xff1a; #define MOD(a,b) a%b int main() { int x4,y16,z; zMOD(y,x); printf("%dn".z)&#xff1b;} 则程序执行的结果是? 2.代码分析&#xff1a; #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 时报错如下&#xff1a; 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 &#x1f7e3; Plasmo v0.83.0 &…...

【Java】Java实现100万+ 的高并发、高性能设计

Java实现100万 的高并发、高性能设计 1、简述 现百万级并发编是一项综合性的技术&#xff0c;同时&#xff0c;它与现实生活中 的场景有着紧密的联系。 搞懂并发编程有三大核心问题 分工问题 同步问题 互斥问题 本文就对这三大核心问题进行简单的介绍 2、分工问题 关于分工…...

linux系统下,在vscode的命令行中调试python文件

首先参考vscode官网文档Command line debugging 步骤 1&#xff08;只需一次&#xff09;&#xff1a;安装debugpy 步骤 2&#xff1a;在命令行中运行 python -m debugpy --listen 5678 --wait-for-client -m dir1.dir2.your_script 以上命令使用了端口5678&#xff0c;也可…...

DFS(分布式文件系统)与 DFSR(分布式文件系统复制)的区别

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

丈母娘说:有编制的不如搞编程的

10月17日百度世界大会召开&#xff0c;据说文心大模型又牛X了&#xff0c;综合水平相比GPT4毫不逊色&#xff0c;真是个让人激动的消息&#xff0c;国产大模型的进展可以说是日新月异&#xff0c;我这耳朵边一直响彻四个字&#xff1a;遥遥领先。 不过今天我关注的重点不是什么…...

vue 部署后 405 not allowed

关于部署vue项目dist包&#xff0c;在nginx配置遇到的坑&#xff1a; 1.vue项目中vue.config.js的配置&#xff1a;devServer.proxy 可以是一个指向开发环境 API 服务器的字符串&#xff1a; evServer: {proxy: {/prod-api: {target: http://192.168.0.68:38090;,changeOrigi…...

【限时免费】20天拿下华为OD笔试之【回溯】2023Q1-硬件产品销售方案【欧弟算法】全网注释最详细分类最全的华为OD真题题解

【回溯】2023Q1-硬件产品销售方案 题目描述与示例 题目描述 某公司目前推出了 AI 开发者套件、AI 加速卡、AI 加速模块、AI 服务器、智能边缘多种硬件产品&#xff0c;每种产品包含若干个型号。现某合作厂商要采购金额为 amount 元的硬件产品搭建自己的 AI 基座。假设当前库…...

蜻蜓c影视追剧系统-多个小程序添加说明

多小程序添加设置 蜻蜓c影视追剧 支持多小程序添加&#xff0c;也就是可以管理不同前端的小程序。 此处id 对应前端小程序的mp值 关于添加小程序&#xff1a; 此处有所有填写内容的参考方式&#xff0c;要注意是必须开通了微信支付才可以添加&#xff0c;这里需要添加证书信息…...

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分区&#xff0c;写文件&#xff0…...

基于 KubeSphere 部署 KubeBlocks 实现数据库自由

作者&#xff1a;尹珉&#xff0c; KubeSphere Contributor & Ambassador&#xff0c;KubeSphere 社区用户委员会杭州站站长。 KubeSphere 是什么&#xff1f; KubeSphere 是在 Kubernetes 之上构建的面向云原生应用的分布式操作系统&#xff0c;完全开源&#xff0c;支持…...

图像识别-人脸识别与疲劳检测 - 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 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是…...

高性能计算与多模态处理的探索之旅:英伟达GH200性能优化与GPT-4V的算力加速未来

★多模态大模型&#xff1b;GPU算力&#xff1b;LLMS&#xff1b;LLM&#xff1b;LMM&#xff1b;GPT-4V&#xff1b;GH200&#xff1b;图像识别&#xff1b;目标定位&#xff1b;图像描述&#xff1b;视觉问答&#xff1b;视觉对话&#xff1b;英伟达&#xff1b;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)

接前一篇文章&#xff1a;软考 系统架构设计师系列知识点之软件构件&#xff08;1&#xff09; 所属章节&#xff1a; 第2章. 计算机系统基础知识 第3节. 计算机软件 2.3.7 软件构件 3. 商用构件的标准规范 当前&#xff0c;主流的商用构件标准规范包括对象管理组织&#xff…...

【试题011】C语言多个运算符计算例题

1.题目&#xff1a;表达式1!23/45%6(78)9的值是&#xff1f; 2.代码&#xff1a; #include <stdio.h> int main() {//表达式1 !2 3 / 4 5 % 6 (7 8) 9的值printf("%d\n", (1 !2 3 / 4 5 % 6 (7 8) 9));//分析&#xff1a;多个运算符先考虑优先级…...

win10系统同时安装 vue2和vue3

https://www.cnblogs.com/xiaohuasan/p/16030569.html...

带声学释放器的近海海底潜标的回收记录

我们主要在大洋调查中使用带声学释放器的海底潜标&#xff0c;在近岸海域很少这样做&#xff0c;因为近岸海域拖网作业较多&#xff0c;海底潜标很容易被渔网拖走或移位。前段时间&#xff0c;我们在近海也使用了这种方式&#xff0c;主要考虑到测区水深较深&#xff0c;即使是…...

新加坡服务器托管

新加坡是一个小而繁荣的国家&#xff0c;是东南亚唯一一个发达国家。它地理位置好&#xff0c;毗邻马来西亚和印度尼西亚&#xff0c;新加坡是一个拥有先进科技和强大经济的国家&#xff0c;主要以制造业、金融、旅游和航运为主&#xff0c;拥有先进的经济和现代化的基础设施&a…...

Si24R2|2.4G单发射芯片 +7dBm可调功率 校讯通

Si24R2是一种通用、低功耗、高性能的2.4GHz无线射频发射芯片&#xff0c;主要用于单向通信系统&#xff0c;以降低系统成B&#xff0c;在运行中与si24r1兼容。 Si24r2具有低功耗和低成B。 它主要用于单向低功率传输系统&#xff0c;如无线控制系统、无线数据采集系统等。 Si2…...

如何让ChatGPT生成图片?

目录 一、那么如何解决让ChatGPT具有画图能力的问题呢&#xff1f; 二、那ChatGPT为什么能生成图片呢&#xff1f; 我们都知道ChatGPT只是个纯文本的AI模型&#xff0c;不具备画图能力。它可以生成文本&#xff0c;但如果让他生成图片就会显示如下的声明&#xff1a; 但通过本…...

从零开始学习 Java:简单易懂的入门指南之反射(三十八)

反射 1. 反射1.1 反射的概述&#xff1a;1.2 学习反射到底学什么&#xff1f;1.3 获取字节码文件对象的三种方式1.4 字节码文件和字节码文件对象1.5 获取构造方法1.6 获取构造方法并创建对象1.7 获取成员变量1.8 获取成员变量并获取值和修改值1.9 获取成员方法1.10 获取成员方法…...

【七:(测试用例)spring boot+testng+xml+mock实现用例管理+数据校验】

目录 1、目录结构的相关类cases类1、添加用户 AddUserTest2、获取用户列表信息 GetUserInfoListTest3、获取用户信息 GetUserInfoTest4、登录测试5、更新用户信息 config类1、报告配置2、用户路径配置 model类utils类 配置配置类SQLMapper.xmlspring boot全局配置databaseConfi…...

哪些数据应该先治理

在我们提供的数据中&#xff0c;哪些是真正需要优先治理的呢&#xff1f;这是任何数据治理项目开始之前都需要解决的问题。正确地确定了数据治理的优先级&#xff0c;不仅可以帮助我们将有限的资源用在刀刃上&#xff0c;更能实现数据治理的最大价值。下面数聚就深度为企业管理…...

No module ‘xformers‘. Proceeding without it.

一、背景&#xff1a; 运行提示 No module xformers. Proceeding without it. 二、分析 1、xformers是SD的加速模块&#xff0c;没有他可以继续运行&#xff0c;可以正常生成图片。只是xformers可以帮助提升图片的生成速度。 2、安装完SD后&#xff0c;启动出现xformers未安…...