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

Linux三剑客之awk命令详解

1、概述

Linux三剑客:grep、sed、awk。grep主打查找功能,sed主要是编辑行,awk主要是分割列处理。本篇文章我们详细介绍awk命令。

awk其名称得自于它的创始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母。awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入(stdin)、一个或多个文件,或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。它在命令行中使用,但更多是作为脚本来使用。awk有很多内建的功能,比如数组、函数等,这是它和C语言的相同之处,灵活性是awk最大的优势。

awk是以文件的一行为处理单位的。awk每接收文件的一行,然后执行相应的命令,来处理文本。

2、语法

awk [选项] '执行脚本' var=value 文件列表多个以空格分隔
awk [选项] -f 脚本文件 var=value 文件列表多个以空格分隔

基本使用

[root@liuchao ~]# echo seg1:seg2:seg3:seg4:seg5 | awk -F':' '{print $2$3}'
seg2seg3
[root@liuchao ~]#

图解:

多分隔符实例:

从”ab,cd:ef“字符串中拆分出 ”ab ef“ ,这里以”,“和":"为分隔符拆分

[root@liuchao ~]# echo ab,cd:ef | awk -F'[,:]+' '{print $1" "$3}'
ab ef
[root@liuchao ~]#

3、BEGIN 和 END 模块

咱们知道一个文件有多行数据,执行一个awk命令时,awk会对没一样数据执行相同的命令。但是有时候希望执行像模板模式一样,在整个文件执行awk命令之前和之后做一些事情。对于这种需求,我们就需要用到BEGIN和END模块。
awk在执行输入文件执前会执行BEGIN块,在执行完输入文件所有行之后会执行END块。
BEGIN常用场景:初始化字段分隔符变量、打印页眉等。
END常用场景:执行最终计算或者打印最终摘要信息等。

实例一、统计某个文件夹下的文件占用的字节数

[root@liuchao ~]# ll
总用量 4
drwxr-xr-x 2 root root 23 3月  31 18:04 awk_test
-rw-r--r-- 1 root root 84 11月  7 2019 catalina.out
drwxr-xr-x 6 root root 64 3月  29 16:38 logs
drwxr-xr-x 4 root root 34 12月 16 2019 nacos
[root@liuchao ~]#
[root@liuchao ~]# ll | awk 'BEGIN {size=0;} {size=size+$5;} END{print "当前文件夹总大小是:"size}'
当前文件夹总大小是:205
[root@liuchao ~]#

 实例二、统计某个文件夹下的文件占用的大小已M为单位

[root@liuchao ~]# ll | awk 'BEGIN {size=0;} {size=size+$5;} END{print "当前文件夹总大小是:"size/1024/1024"M"}'
当前文件夹总大小是:0.000195503M
[root@liuchao ~]#

 4、运算符

#赋值运算符:a+5
[root@liuchao ~]# awk 'BEGIN{a=5;a+=5;print a}'
10#逻辑运算符:a>2&&b>1 运算结果  和 a=1||b>1 运算结果
[root@liuchao ~]# awk 'BEGIN{a=1;b=2;print (a>2&&b>1,a=1||b>1)}'
0 1# 正则运算符
[root@liuchao ~]# awk 'BEGIN{a="100testaa";if(a~/100/) {print "ok"}}'
ok
[root@liuchao ~]# echo|awk 'BEGIN{a="100testaaa"}a~/test/{print "ok"}'
ok
[root@liuchao ~]## 关系运算符
[root@liuchao ~]# awk 'BEGIN{a=5;if(a>=6){print "true"}}'
[root@liuchao ~]# awk 'BEGIN{a=5;if(a>=5){print "true"}}'
true# 算数运算符 说明,所有用作算术运算符进行操作,操作数自动转为数值,所有非数值都变为0。
[root@liuchao ~]# awk 'BEGIN{a="b";b=3;print ++a,++b}'
1 4
[root@liuchao ~]## 三目运算符
[root@liuchao ~]# awk 'BEGIN{a="3";print a=="3"?"true":"false"}'
true
[root@liuchao ~]#

 5、常用内置变量 

5.1、字符串分隔符"FS"

# 测试文件内容
[root@liuchao awk_test]# cat test1.txt
test ab  ac ad
testb  fd  bd  gg
testc ii   jj www ab
testd ab   ff bb dd
# 在BEGIN 模块中设置 分隔符 ' ' , ”+“ 标识多个
[root@liuchao awk_test]# awk 'BEGIN{FS="[ ]+"}{print $2}' test1.txt
ab
fd
ii
ab
# 在BEGIN 模块中设置 分隔符 ' ' , ”+“ 标识多个
[root@liuchao awk_test]# awk 'BEGIN{FS=" +"}{print $2}' test1.txt
ab
fd
ii
ab
# 使用-F 选项设置分隔符
[root@liuchao awk_test]# awk -F' +' '{print $2}' test1.txt
ab
fd
ii
ab
[root@liuchao awk_test]#

5.2、字符串数量 

# 测试文件内容
[root@liuchao awk_test]# cat test1.txt
test ab  ac ad
testb  fd  bd  gg
testc ii   jj www ab
testd ab   ff bb dd# 一个或者多个空格分隔后,分隔数量等于5个 打印 当前行记录
[root@liuchao awk_test]# awk -F ' +' 'NF==5{print $0}' test1.txt
testc ii   jj www ab
testd ab   ff bb dd
[root@liuchao awk_test]#

相关文章:

Linux三剑客之awk命令详解

1、概述 Linux三剑客:grep、sed、awk。grep主打查找功能,sed主要是编辑行,awk主要是分割列处理。本篇文章我们详细介绍awk命令。 awk其名称得自于它的创始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母。awk是一种编…...

C++异常处理:掌握高效、健壮代码的秘密武器

C异常处理全面解析:底层原理、编译器技巧与实用场景C异常机制:让我们迈向更安全、更可靠的代码C异常处理:掌握基本概念什么是异常?异常处理的重要性C异常处理的组成部分:try、catch、throw探索C异常处理的核心&#xf…...

Jetpack Compose基础组件之按钮组件

概述 按钮组件Button是用户和系统交互的重要组件之一,它按照Material Design风格实现,我们先看下Button的参数列表,通过参数列表了解下Button的整体功能 Composable fun Button(onClick: () -> Unit, // 点击按钮时的回调modifier: Modi…...

利用json-server快速在本地搭建一个JSON服务

1,json-server介绍 一个在前端本地运行,可以存储json数据的server。 通俗来说,就是模拟服务端接口数据,一般用在前后端分离后,前端人员可以不依赖API开发,而在本地搭建一个JSON服务,自己产生测…...

可重入函数与线程安全

指令乱序和线程安全 先来看什么是指令乱序问题以及为什么有指令乱序。程序的代码执行顺序有可能被编译器或CPU根据某种策略打乱指令执行顺序,目的是提升程序的执行性能,让程序的执行尽可能并行,这就是所谓指令乱序问题。理解指令乱序的策略是…...

一文彻底读懂异地多活

文章目录 系统可用性单机架构主从副本风险不可控同城灾备同城双活两地三中心伪异地双活真正的异地双活如何实施异地双活1、按业务类型分片2、直接哈希分片3、按地理位置分片异地多活总结系统可用性 要想理解异地多活,我们需要从架构设计的原则说起。 现如今,我们开发一个软件…...

孕酮PEG偶联物:mPEG Progestrone,PEG Progestrone,甲氧基聚乙二醇孕酮

中文名称:甲氧基聚乙二醇孕酮 英文名称:mPEG Progestrone,PEG Progestrone 一、反应机理: 孕酮-PEG衍生物是一类具有生物活性的类固醇-PEG偶联物,可用于药物发现或生物测定开发。孕酮是一种女性性激素,负…...

网络系统集成实验(一)| 网络系统集成基础

目录 一、前言 二、实验目的 三、实验需求 四、实验步骤与现象 (1)网络设置、网络命令的使用 ① 在华为设备中,常用指令的使用 ② 在思科设备中,常用指令的使用 ③ 在Windows设备中,常用网络指令的使用 &#xf…...

php composer 如何安装windows电脑

在 Windows 电脑上安装 PHP Composer,你需要按照以下步骤操作: 安装 PHP 确保你的电脑上已经安装了 PHP。如果还没有安装,可以从 PHP 官网(https://www.php.net/downloads.php)下载安装包并安装。 设置环境变量 将 P…...

API 鉴权插件上线!支持用户自定义鉴权插件

0.4.0 版本更新主要围绕这几个方面: 分组独立的 UI,支持分组 API 鉴权 API 测试支持继承 API 鉴权 支持用户自定义鉴权插件,仅需部分配置即可发布鉴权插件 开始介绍功能之前,我想先和大家分享一下鉴权功能设计的一些思考。 其实…...

2023年NOC大赛加码未来编程赛道-初赛-Python(初中组-卷1)

2023年NOC大赛加码未来编程赛道-初赛-Python(初中组-卷1) *1.Python自带的编程环境是? A、PyScripter B、Spyder C、Notepad++ D、IDLE *2.假设a=20,b-3,那么a or b的结果是? () A、20 B、0 C.1 D.3 *3.假设a=2,b=3,那么a-b*b的值是? A、 3 B、-2 C、-7 D、-11 *4.…...

day21—编程题

文章目录1.第一题1.1题目1.2思路1.3解题2.第二题2.1题目2.2思路2.3解题1.第一题 1.1题目 描述: 洗牌在生活中十分常见,现在需要写一个程序模拟洗牌的过程。 现在需要洗2n张牌,从上到下依次是第1张,第2张,第3张一直到…...

【数据结构】栈与队列经典选择题

🚀write in front🚀 📜所属专栏: 🛰️博客主页:睿睿的博客主页 🛰️代码仓库:🎉VS2022_C语言仓库 🎡您的点赞、关注、收藏、评论,是对我最大的激励…...

Linux常用命令详细示例演示

一、Linux 常用命令一览表 Linux 下命令格式: command [-options] [parameter] 命令 [选项] [参数] command 是命令 例如:ls cd copy[-options] 带方括号的都是可选的 一些选项 例如:ls -l 中的 -l[parameter] 可选参数,可以是 0…...

9-数据可视化-动态柱状图

文章目录1.基础柱状图2.基础时间线柱状图3.动态柱状图1.基础柱状图 from pyecharts.charts import Bar bar Bar() # 构建柱状图对象 bar.add_xaxis(["中国","美国","英国"]) bar.add_yaxis("GDP",[30,20,10]) bar.render()反转xy轴…...

Linux系统【centos7x】安装宝塔面板教程

1. 下载宝塔面板安装包 在宝塔官网下载最新版的安装包,下载完后上传到服务器。 2. 安装宝塔面板 在终端中输入以下命令: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh…...

蓝易云:Linux系统【Centos7】top命令详细解释

top命令是一个非常常用的Linux系统性能监控工具,它可以实时动态地查看系统的各项性能指标,并且可以按照不同的排序方式进行排序,方便用户查找信息。 下面是top命令的详细解释: 1. 第一行:显示系统的运行时间、当前登…...

Muduo库源码剖析(一)——Channel

Muduo库源码剖析(一)——Channel 说明 本源码剖析是在muduo基础上,保留关键部分进行改写分析。 要点总结 事件分发器 event dispatcher中最重要的两个类型 channel 和 Poller Channel可理解为通道,poller往通道传输数据(事件发生情况)。 EventLoop…...

Java多线程:定时器Timer

前言 定时/计划功能在Java应用的各个领域都使用得非常多,比方说Web层面,可能一个项目要定时采集话单、定时更新某些缓存、定时清理一批不活跃用户等等。定时计划任务功能在Java中主要使用的就是Timer对象,它在内部使用多线程方式进行处理&am…...

设计模式---装饰模式

目录 介绍 实现 优缺点 装饰模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有类的一个包装。这种模式创建了一个装饰类,用来包装原有…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录

ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

stm32G473的flash模式是单bank还是双bank?

今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

Cinnamon修改面板小工具图标

Cinnamon开始菜单-CSDN博客 设置模块都是做好的&#xff0c;比GNOME简单得多&#xff01; 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现

摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序&#xff0c;以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务&#xff0c;提供稳定高效的数据处理与业务逻辑支持&#xff1b;利用 uniapp 实现跨平台前…...

select、poll、epoll 与 Reactor 模式

在高并发网络编程领域&#xff0c;高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表&#xff0c;以及基于它们实现的 Reactor 模式&#xff0c;为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。​ 一、I…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...