Linux Shell:`awk` 命令

Linux Shell:awk 命令

awk 是一种强大的文本分析工具,广泛用于文本处理、数据提取和报告生成。它使用自己的编程语言来处理文件中的数据。在 Linux Shell 中,awk 命令能够执行复杂的模式匹配、编辑和分析任务。本文将介绍 awk 的基础用法、高级功能和一些实用的示例。

基础用法

语法和工作流程

awk 命令的基本语法如下:

awk 'pattern {action}' file

这里,pattern 表示一个条件表达式,用于匹配文件中的文本行;action 是一组在匹配到 pattern 的文本行上执行的命令,用大括号 {} 包围。如果省略 pattern,则 action 会在文件的每一行上执行。

awk 读取输入文件的每一行,并将其分割成字段,字段默认由空格分隔。这些字段可以通过 $1, $2, $3 等访问,其中 $0 表示整行文本。

常用示例

  1. 打印文件内容

    使用 awk 打印文件的每一行:

    awk '{print}' file.txt
    
  2. 过滤和打印特定字段

    打印文件每一行的第一个和第三个字段:

    awk '{print $1, $3}' file.txt
    
  3. 条件过滤

    只打印第一个字段大于10的行:

    awk '$1 > 10' file.txt
    

高级功能

内置变量

awk 提供了一系列内置变量,用于访问记录和字段的信息,如 NR(当前记录数)、NF(当前记录的字段数)、FS(字段分隔符)等。

数组

awk 支持一维和多维数组,可以用于存储和操作数据集合。

控制结构

awk 支持包括 if-elsewhilefor 在内的控制结构,使得数据处理更加灵活。

函数

awk 内置了字符串、数学和时间处理函数,用户还可以定义自己的函数。

实用示例

  1. 统计文件的行数和字段数

    awk '{print "Line No:", NR, " - Fields:", NF}' file.txt
    
  2. 文本数据求和

    假设 file.txt 的第二列包含数字,求这些数字的总和:

    awk '{sum += $2} END {print sum}' file.txt
    
  3. 字段排序

    对文件的第一列进行排序输出:

    awk '{print $1}' file.txt | sort
    
  4. 文本替换

    将文件中匹配到的字符串替换为另一个字符串,并输出:

    awk '{gsub(/old/, "new"); print}' file.txt
    
  5. 提取线程名

示例内容:

"Attach Listener" #410 daemon prio=9 os_prio=0 cpu=0.95ms elapsed=23.42s tid=0x00007efcec001800 nid=0x3afc waiting on condition  [0x0000000000000000]java.lang.Thread.State: RUNNABLE
"VM Thread" os_prio=0 cpu=16838.04ms elapsed=7893.98s tid=0x00007efd3410c000 nid=0xe4d runnable  
"GC Thread#0" os_prio=0 cpu=25892.92ms elapsed=7894.00s tid=0x00007efd3403b000 nid=0xe4a runnable  
"GC Thread#1" os_prio=0 cpu=25976.88ms elapsed=7893.69s tid=0x00007efd00001000 nid=0xe58 runnable  
"GC Thread#2" os_prio=0 cpu=25870.39ms elapsed=7893.69s tid=0x00007efd00002800 nid=0xe59 runnable  
"GC Thread#3" os_prio=0 cpu=26030.61ms elapsed=7893.69s tid=0x00007efd00004800 nid=0xe5a runnable  
"GC Thread#4" os_prio=0 cpu=26117.53ms elapsed=7892.88s tid=0x00007efd0000a800 nid=0xe6b runnable  
"GC Thread#5" os_prio=0 cpu=25883.62ms elapsed=7892.88s tid=0x00007efd0000c000 nid=0xe6c runnable  
"GC Thread#6" os_prio=0 cpu=26060.07ms elapsed=7892.88s tid=0x00007efd0000e000 nid=0xe6d runnable  
"GC Thread#7" os_prio=0 cpu=25909.10ms elapsed=7892.88s tid=0x00007efd0000f800 nid=0xe6e runnable  
"CMS Main Thread" os_prio=0 cpu=21894.02ms elapsed=7894.00s tid=0x00007efd340ab800 nid=0xe4c runnable  
"CMS Thread#0" os_prio=0 cpu=6337.31ms elapsed=7894.00s tid=0x00007efd340a8800 nid=0xe4b runnable  
"CMS Thread#1" os_prio=0 cpu=6391.38ms elapsed=7892.87s tid=0x00007efcfc001000 nid=0xe6f runnable
  • 输出cpu时间
    grep "GC" 20210420.md|awk '{print $4}'

    tips:awk 命令默认以空格分割

  • 输出cpu时间大于26000ms的线程名
    grep "GC" 20210420.md|awk -F '[ =ms]' '$7>26000 {print $0}'|awk '{print $2}'

    -F [ =ms]的意思是,先以空格分割,再用等号分割,最后以ms分割
    '$7>26000 {print $0}'参数7大于26000则输出结果

参考链接

  • AWK 用户手册:https://www.gnu.org/software/gawk/manual/gawk.html
  • AWK 程序设计语言:https://www.amazon.com/AWK-Programming-Language-Alfred-Aho/dp/020107981X

在这里插入图片描述

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

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

相关文章

激光雷达和相机的联合标定工具箱[cam_lidar_calibration]介绍

激光雷达和相机的联合标定工具箱[cam_lidar_calibration]介绍 写在前面安装过程调试过程标定成功可视化展示 写在前面 激光雷达和相机联合标定工具 论文地址:https://ieeexplore.ieee.org/stamp/stamp.jsp?tp&arnumber9564700 github地址: https://github.com…

系统架构评估_2.SAAM方法

SAAM(Scenarios-based Architecture Analysis Method)是卡耐基梅隆大学软件工程研究所(SEI at CMU)的Kazman等人于1983年提出的一种非功能质量属性的架构分析方法,是最早形成文档并得到广泛使用的软件架构分析方法。最…

RabbitMQ Docker 安装与应用

1.官方镜像 该镜像包含用户操作界面 2.Docker运行,并设置开机自启动 docker run -d --restartalways --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3.10-management 默认登录账户和密码 guest 3、使用 队列和交换机绑定

【CicadaPlayer】视频切换/音视频同时切换

G:\CDN\all_players\CicadaPlayer-github-0.44\mediaPlayer\SuperMediaPlayer.hCicadaPlayer https://github.com/alibaba/CicadaPlayer可以clone 整个仓库的历史 git clone --bare https://github.com/username/project.git整体架构 :根据这个更容易理解:切换就是judgeFunc…

zookeeper中的znode节点的一些功能和应用

zookeeper是一个挺好玩的东西 有着独特的选举机制,一般在中小型集群中,zookeeper一般装在三个节点 其中只有一个节点对外提供服务,处于leader状态,另外两台未follower状态 这得益于zookeeper独特的选举机制,可以保证le…

Ubuntu22.04平台编译完美解决问题“error: GLSL 4.5 is not supported.”【GLSL(OpenGL着色器语言)】

GLSL介绍 GLSL(OpenGL着色器语言)是用于编写OpenGL着色器程序的语言。GLSL 4.5 是 GLSL 的一个版本,引入了许多新的特性和改进,旨在提高着色器编程的灵活性和性能。GLSL 4.5 工具通常是用于编写、调试和优化 GLSL 4.5 着色器代码…

【TI毫米波雷达】官方工业雷达包的生命体征检测环境配置及避坑(Vital_Signs、IWR6843AOPEVM)

【TI毫米波雷达】官方工业雷达包的生命体征检测环境配置及避坑(Vital_Signs、IWR6843AOPEVM) 文章目录 生命体征基本介绍IWR6843AOPEVM的配置上位机配置文件避坑上位机start测试距离检测心跳检测呼吸频率检测空环境测试 附录:结构框架雷达基…

如何在 Node.js 中使用 bcrypt 对密码进行哈希处理

在网页开发领域中,安全性至关重要,特别是涉及到用户凭据如密码时。在网页开发中至关重要的一个安全程序是密码哈希处理。 密码哈希处理确保明文密码在数据库受到攻击时也难以被攻击者找到。但并非所有的哈希方法都是一样的,这就是 bcrypt 突…

AcWing刷题-公约数

公约数 代码 from math import gcd a, b map(int, input().split()) p int(input()) max_gcd gcd(a, b) res []for i in range(1, int(max_gcd**0.5)1):if max_gcd % i 0:res.append(i) res.append(max_gcd//i) res sorted(set(res))for _ in range(p):l, r map(int,…

绘图工具 draw.io / diagrams.net 免费在线图表编辑器

拓展阅读 常见免费开源绘图工具 OmniGraffle 创建精确、美观图形的工具 UML-架构图入门介绍 starUML UML 绘制工具 starUML 入门介绍 PlantUML 是绘制 uml 的一个开源项目 UML 等常见图绘制工具 绘图工具 draw.io / diagrams.net 免费在线图表编辑器 绘图工具 excalidr…

mac老版本如何升级到最新版本

mac老版本如何升级到最新版本 老macbook升级新版本(Big sur、Monterey) 首先介绍我的电脑的机型及情况: 2015年初的MacBook Air 处理器是1.6Hz 双核Interl Core i5 内存4G 老版本只能升到10.13 想要升到最高版本的原因:想要注册…

JJVM类的加载过程

类的加载过程 一个java文件从被加载到被卸载这个生命过程,总共要经理五个阶段,JVM将类加载过程分为:(加链初使卸) 1. 加载 首先通过一个类的全限定名来获取此类的二进制字节流;其次将这个字节流所代表的静…

Centos7下docker删除容器与镜像

个人记录 查看容器 docker ps -a停止容器运行 docker stop jenkins卸载容器 docker rm jenkins查看镜像 docker images卸载镜像 docker rmi IMAGE ID查看容器与镜像是否卸载完毕 docker images docker ps -a

avro c++编译与使用

一、arvo介绍 Avro 是 Hadoop 中的一个子项目,也是一个数据序列化系统,其数据最终以二进制格式,采用行式存储的方式进行存储。 Avro提供了: 1)、丰富的数据结构。 2)、可压缩、快速的二进制数据格式。 3)、一个用来存储持久化数据…

海外媒体宣发,穿透与世界的交流 - “保姆级”教程 - 大舍传媒

1. 引言 在当今高度信息化的世界,境外媒体宣发已经成为企业、品牌和政府机构推广自身形象、扩大影响力的重要手段。如何在国际舞台上有效传播信息,提高国际知名度,成为了许多组织面临的重要课题。大舍传媒凭借多年的境外媒体宣发经验&#x…

TYPE-C PD协议 OTG - 开启充电与数据传输

TYPE-C PD协议,作为一种先进的充电与数据传输协议,正以其卓越的性能引领着充电与数据传输技术的发展。它通过USB Type-C接口,实现了充电与数据传输的完美结合,为用户带来了前所未有的便捷体验。 TYPE-C PD协议的一大亮点在于其支…

Go 项目依赖注入wire工具最佳实践介绍与使用

文章目录 一、引入二、控制反转与依赖注入三、为什么需要依赖注入工具3.1 示例3.2 依赖注入写法与非依赖注入写法 四、wire 工具介绍与安装4.1 wire 基本介绍4.2 安装 五、Wire 的基本使用5.1 前置代码准备5.2 使用 Wire 工具生成代码 六、Wire 核心技术5.1 抽象语法树分析5.2 …

KNN课堂(分类课堂(可用kd树/特征归一化提高精度)))

实验代码: # 导入所需要的库 import numpy as np import pandas as pd from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import train_test_split from sklearn.neighbors import KNeighborsClassifier # 导入数据集 df pd.…

缓存雪崩以及解决思路

缓存雪崩:缓存雪崩是指在同一时段大量的缓存key同时失效或者Redis服务宕机,导致大量请求到达数据库,带来巨大压力。 解决方案: 给不同的Key的TTL添加随机值 利用Redis集群提高服务的可用性 给缓存业务添加降级限流策略 给业务…

Centos7源码方式安装Elasticsearch 7.10.2单机版

下载 任选一种方式下载 官网7.10.2版本下载地址: https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.10.2-linux-x86_64.tar.gz 网盘下载链接 链接:https://pan.baidu.com/s/1EJvUPGVOkosRO2PUaKibaA?pwdbnqi 提取码&#x…