Linux Shell 脚本编程基础知识篇—awk的条件判断(3)

ℹ️大家好,我是练小杰,今天周五了,又是一周过去了😆
本文是有关Linux shell脚本编程的awk命令的条件语句,后续我会不断增加相关内容 ~~
回顾:【awk字符串函数和内置变量】
更多Linux 相关内容请点击👉【Linux专栏】

在这里插入图片描述

文章目录

  • 前言
  • awk条件判断
    • 单分支语句
    • 双分支if语句
      • 举例
    • 多分支语句
      • 实例:
    • While循环
    • do-while循环
    • for循环
  • awk命令综合练习
    • 答案如下:

在这里插入图片描述

前言

在Shell脚本中的条件判断语句,与C语言、PHP语法里的条件判断语句如出一辙,学过C语言条件判断语句的朋友应该深有体会!!!

awk条件判断

与C语言一样,awk脚本中也有if选择语句,for循环,while循环等的条件判断语句,下面就来讲讲awk脚本的判断,循环语句以及awk命令的综合练习~~

单分支语句

if判断后面如果只有一个动作指令,则花括号{}可省略,如果if判断后面的指令为多条指令则需要使用花括号括起来,多个指令使用分号分隔。

  • 基本语法:
if(判断条件){
动作指令序列;
} 
  • 举例:查找cpu使用率大于0.5的进程
[root@localhost ~]#  ps -eo user,pid,pcpu,comm | awk '{if($3>0.5) print}'
root  8078  0.9 gnome-shell

双分支if语句

  • 基本语法:
if (判断条件){
动作指令序列1;
}  
else {动作指令序列2;
}

举例

  • 当文件中第二列大于100时输出当前脚本名,否则输出“第二列不大于100”
awk '{ if ($2 > 100) print $0; else print "第二列不大于100" }' 文件名
  • 统计文件/etc/passwd 中系统用户和普通用户的个数
awk –F ':' '{if($3<1000) {x++} else{y++}} END{print "系统用户:" x "","普通用户的个数:" y ""}' /etc/passwd#输出: 系统用户:44 普通用户的个数:15

多分支语句

if (判断条件1) {动作指令1;
} else if (判断条件2) {动作指令2;
} else {动作指令N;
}

说明:

  1. 首先检查判断条件1,如果条件为,则执行动作指令1
  2. 如果判断条件1,则继续检查判断条件2,如果条件为,则执行动作指令2
  3. 如果判断条件1和判断条件2都为假,则执行动作指令N

实例:

  • 计算当前目录下,普通文件的大小,使用KB作为单位
ls -l|awk 'BEGIN{sum=0} !/^d/{sum+=$5} END{print "total size is:“ int(sum/1024),"KB"}'    

命令解释:

  • ls -l:该命令列出当前目录下的所有文件和目录的详细信息,包括权限、链接数、所有者、所属组、大小、修改日期和文件名。
  • 'BEGIN{sum=0}':在处理任何输入行之前,先初始化一个变量 sum 为 0。
  • !/^d/{sum+=$5} :对于每一行输入,如果该行不以字母 d 开头(!/^d/),则将该行的第5个字段(文件大小)加到 sum 中。这里 ^d 表示以 d 开头的行,通常目录行的第一个字符是 d,所以这个条件排除了目录,只计算文件的大小。
  • END{print "total size is:" int(sum/1024),"KB"}:在处理完所有输入行后,打印总大小。int(sum/1024) 将总大小转换为KB,并取整。
  • 统计netstat -anp 状态为LISTEN和CONNECT的连接数量分别是多少
netstat -anp | awk '$6~/LISTEN|CONNECTED/{sum[$6]++} END{for (i in sum) printf "%-10s %-6s %-3s \n", i," ",sum[i]}'

命令解释:

  • netstat : 查看网络连接、路由表和网络接口信息
  • $6~/LISTEN|CONNECTED/:检查每一行的第6个字段是否匹配 LISTEN 或 CONNECTED。~ 是匹配操作符,用于模式匹配。
  • {sum[$6]++}:如果匹配成功,则将该状态的计数器加1。这里使用关联数组 sum 来记录每种状态的数量。
  • END{...}: 在处理完所有输入行后执行的代码块。
  • for (i in sum):遍历关联数组 sum 中的所有元素。
  • printf "%-10s %-6s %-3s \n", i," ",sum[i]:格式化输出。每行输出三个字段:状态名称(左对齐,占10个字符宽度)、一个空格(占6个字符宽度)、状态数量(左对齐,占3个字符宽度)。

While循环

  • 基本语法:
while (condition) {while body}
  • 举例:awk 命令用于逐行读取 lxj.txt 文件,并对每一行中的每个字段进行遍历和打印
awk '{i=1while(i <= NF) {print $ii++}
}' lxj.txt
  • 命令解释
  • while(i <= NF): while 循环用于遍历当前行的所有字段。
    NF 是 awk 的一个内置变量,表示当前行的字段数量(Number of Fields)。
    i <= NF 是循环条件,表示当 i 小于或等于当前行的字段数时继续循环。

  • print $i
    print 是 awk 的一个内置函数,用于输出内容。
    $i 是 awk 的一个特殊变量,表示当前行的第 i 个字段。例如,$1 表示第一个字段,$2 表示第二个字段,依此类推。

do-while循环

  • 基本格式:
do {body} while (condition)
  • 实例:awk 命令用于逐行读取 lxj.txt 文件,并对每一行中的每个字段进行遍历和打印(和上面例子效果一样)
awk '{i = 1do {print $ii++} while (i <= NF)
}'  lxj.txt

for循环

  • 基本语法:
for (variable assignment; condition; iteration process)
{ body}
  • 举例:awk 命令用于逐行读取 test.txt 文件,并对每一行中的每个字段、进行遍历和打印
awk '{for(i=1; i<=NF; i++) {print $i}
}' test.txt

解释:

for(i=1; i<=NF; i++): for 循环用于遍历当前行的所有字段
i=1:初始化循环变量 i 为 1,表示从第一个字段开始。
i<=NF:循环条件,NF 是 awk 的一个内置变量,表示当前行的字段数量。因此,i<=NF 表示当 i 小于或等于当前行的字段数时继续循环。
i++:每次循环后,i 的值增加 1

awk命令综合练习

  • 创建文本文件ljjawk.txt内容如下:
Mike Harrington:[510] 548-1278:250:100:175
Christian Dobbins:[408] 538-2358:155:90:201
Susan Dalsass:[206] 654-6279:250:60:50
Archie McNichol:[206] 548-1348:250:100:175
Jody Savage:[206] 548-1278:15:188:150
Guy Quigley:[916] 343-6410:250:100:175
Dan Savage:[406] 298-7744:450:300:275
Nancy McNeil:[206] 548-1278:250:80:75
John Goldenrod:[916] 348-4278:250:100:175
Chet Main:[510] 548-5258:50:95:135
Tom Savage:[408] 926-3456:250:168:200
Elizabeth Stachelin:[916] 440-1763:175:75:300
  • 利用ljjawk.txt文本文件内容进行以下练习:
  1. 显示所有电话号码
  2. 显示Dan的电话号码
  3. 显示Susan的名字和电话号码
  4. 显示所有以D开头的姓
  5. 显示所有以一个C或E开头的名
  6. 显示所有只有四个字符的名
  7. 显示所有区号为916的人名
  8. 显示Mike的捐款.显示每个值时都有以$开头。如$250$100$175
  9. 显示姓,其后跟一个逗号和名,如Jody,Savage
  10. 写一个awk的脚本,它的作用:显示Savage的全名和电话号码.显示Chet的捐款.显示所有头一个月捐款$250的人名.

答案如下:

  • 执行查询命令之前,先看看所有电话号码
cat  ljjawk.txt

在这里插入图片描述

  • 显示Dan的电话号码
awk ':' '$1~/Dan/ {print $2}' ljjawk.txt 

在这里插入图片描述

  • 显示Susan的名字和电话号码
awk -F ':' '$1~/Susan/ {print $1 $2}' ljjawk.txt

在这里插入图片描述

  • 显示所有以D开头的姓
awk -F ':' '$1~/^D/ {print $1}' ljjawk.txt

在这里插入图片描述

  • 显示所有以一个C或E开头的名
awk -F: '$1~/^[C|E]/ {print $1}' ljjawk.txt | awk '{print $2}'

在这里插入图片描述

  • 显示所有只有四个字符的名
awk 'length($1)=="4" {print $1}' ljjawk.txt

在这里插入图片描述

  • 显示所有区号为916的人名
awk -F "[:]" '$2~/916/ {print $1}' ljjawk.txt

在这里插入图片描述

  • 显示Mike的捐款.显示每个值时都有以$开头
awk -F "[:]" '$1~/Mike/ {print "$"$3 "$"$4 "$"$5}' ljjawk.txt

在这里插入图片描述

  • 显示姓,其后跟一个逗号和名
awk  '{print $1","$2}' ljjawk.txt

在这里插入图片描述在这里插入图片描述

  • 编写一个awk的脚本,它的作用:显示Savage的全名和电话号码.显示Chet的捐款.显示所有头一个月捐款$250的人名
awk 'BEGIN{FS=":" } { 
if ($1~/Savage/) { print $1,$2} 
if($1~/Chet/) {print $3,$4,$5}
if($3~/250/) {print $1}
}' ljjawk.txt

在这里插入图片描述

至此,awk命令的相关内容到这里就结束了😆
如果想了解更多,点击主页【练小杰的CSDN】
⚠️若博客里的内容有问题,欢迎指正,我会及时修改!!!
下周再见啦,各位🧍‍♂️大佬们~~

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

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

相关文章

小程序学习07—— uniapp组件通信props和$emit和插槽语法

目录 一 父组件向子组件传递消息 1.1 props &#xff08;a&#xff09;传递静态或动态的 Prop &#xff08;b&#xff09;单向数据流 二 子组件通知父组件 2.1 $emit &#xff08;a&#xff09;定义自定义事件 &#xff08;b&#xff09;绑定自定义事件 三 插槽语法…

【深度学习进阶】基于CNN的猫狗图片分类项目

介绍 基于卷积神经网络&#xff08;CNN&#xff09;的猫狗图片分类项目是机器学习领域中的一种常见任务&#xff0c;它涉及图像处理和深度学习技术。以下是该项目的技术点和流程介绍&#xff1a; 技术点 卷积神经网络 (CNN): CNN 是一种专门用于处理具有类似网格结构的数据的…

【pytorch-lightning】架构一览

pytorch-lightning是基于pytorch的一个套壳项目&#xff0c;适配pytorch的版本同步更新速度很快。 它将训练的几个主要流程模块化&#xff0c;减少重复工作&#xff0c;同时让支持分布式训练&#xff0c;不同平台的训练迁移变得更加简单。 官网链接

AWS K8s 部署架构

Amazon Web Services&#xff08;AWS&#xff09;提供了一种简化的Kubernetes&#xff08;K8s&#xff09;部署架构&#xff0c;使得在云环境中管理和扩展容器化应用变得更加容易。这个架构的核心是AWS EKS&#xff08;Elastic Kubernetes Service&#xff09;&#xff0c;它是…

【Vue】vue项目中命名规范(结合上一篇项目结构)

组件命名规范&#xff1a; 多单词命名&#xff1a; 避免使用单个单词命名组件&#xff0c;因为这可能会导致命名冲突。相反&#xff0c;应该使用描述性的多单词命名&#xff0c;如 UserProfile、SettingsPanel 等。 使用帕斯卡命名法&#xff1a; 组件名称应该以大写字母开头&…

node.js之---事件循环机制

事件循环机制 Node.js 事件循环机制&#xff08;Event Loop&#xff09;是其核心特性之一&#xff0c;它使得 Node.js 能够高效地处理大量并发的 I/O 操作。Node.js 基于 非阻塞 I/O&#xff0c;使用事件驱动的模型来实现异步编程。事件循环是 Node.js 实现异步编程的基础&…

信息科技伦理与道德1:绪论

1 问题描述 1.1 信息科技的进步给人类生活带来的是什么呢&#xff1f; 功能&#xff1f;智能&#xff1f;陪伴&#xff1f;乐趣&#xff1f;幸福&#xff1f; 基于GPT-3的对话Demo DeepFake 深伪技术&#xff1a;通过神经网络技术进行大样本学习&#xff0c;将个人的声音、面…

uniapp 自定义类微信支付键盘 (微信小程序)

效果图 代码: <view class"popups popupsB"><view class"appreciatePrice"><view class"appreciatePriceTitle">赞赏金额</view><view class"appreciatePriceInput flex ac">&#xffe5;<input typ…

电子电气架构 --- 中央处理器HPC及软件架构

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 所谓鸡汤,要么蛊惑你认命,要么怂恿你拼命,但都是回避问题的根源,以现象替代逻辑,以情绪代替思考,把消极接受现实的懦弱,伪装成乐观面对不幸的…

大模型 LangChain 开发框架:Runable 与 LCEL 初探

大模型 LangChain 开发框架&#xff1a;Runable 与 LCEL 初探 一、引言 在大模型开发领域&#xff0c;LangChain 作为一款强大的开发框架&#xff0c;为开发者提供了丰富的工具和功能。其中&#xff0c;Runnable 接口和 LangChain 表达式语言&#xff08;LCEL&#xff09;是构…

Flash Attention V3使用

Flash Attention V3 概述 Flash Attention 是一种针对 Transformer 模型中注意力机制的优化实现&#xff0c;旨在提高计算效率和内存利用率。随着大模型的普及&#xff0c;Flash Attention V3 在 H100 GPU 上实现了显著的性能提升&#xff0c;相比于前一版本&#xff0c;V3 通…

《Vue3实战教程》34:Vue3状态管理

如果您有疑问&#xff0c;请观看视频教程《Vue3实战教程》 状态管理​ 什么是状态管理&#xff1f;​ 理论上来说&#xff0c;每一个 Vue 组件实例都已经在“管理”它自己的响应式状态了。我们以一个简单的计数器组件为例&#xff1a; vue <script setup> import { r…

电脑找不到mfc110.dll文件要如何解决?Windows缺失mfc110.dll文件快速解决方法

一、mfc110.dll文件的重要性 mfc110.dll&#xff0c;全称Microsoft Foundation Class Library 110&#xff0c;是Microsoft Visual C Redistributable for Visual Studio 2012的一部分。这个动态链接库&#xff08;DLL&#xff09;文件对于支持基于MFC&#xff08;Microsoft F…

OSPF特殊区域(open shortest path first LSA Type7)

一、区域介绍 1、Stub区域 Stub区域是一种可选的配置属性。通常来说&#xff0c;Stub区域位于自治系统的边界&#xff0c;例如&#xff0c;只有一 个ABR的非骨干区域。在这些区域中&#xff0c;设备的路由表规模以及路由信息传递的数量都会大量减少。 kill 4 5类type 传递1 …

浏览器选中文字样式

效果 学习 Chrome: 支持 ::selection。Firefox: 支持 :-moz-selection 和 ::selection。Safari: 支持 ::selection。Internet Explorer: 支持 :-ms-selection。Microsoft Edge: 支持 ::-ms-selection 和 ::selection。 代码 <!DOCTYPE html> <html lang"en&qu…

Rabbitmq追问1

如果消费端代码异常&#xff0c;未手动确认&#xff0c;那么这个消息去哪里 2024-12-31 21:19:12 如果消费端代码发生异常&#xff0c;未手动确认&#xff08;ACK&#xff09;的情况下&#xff0c;消息的处理行为取决于消息队列的实现和配置&#xff0c;以下是基于 RabbitMQ …

Ansys Discovery 中的网格划分方法:探索模式

本篇博客文章将介绍 Ansys Discovery 中可用于在探索模式下进行分析的网格划分方法。我们将在下一篇博客中介绍 Refine 模式下的网格划分技术。 了解 Discovery Explore 模式下的网格划分 网格划分是将几何模型划分为小单元以模拟系统在不同条件下的行为的过程。这是通过创建…

Golang的并发编程实战经验

## Golang的并发编程实战经验 并发编程是什么 并发编程是指程序的多个部分可以同时执行&#xff0c;这样可以提高程序的性能和效率。在Golang中&#xff0c;并发编程是通过goroutine来实现的&#xff0c;goroutine是一种轻量级线程&#xff0c;可以在一个程序中同时运行成千上万…

vue2实现excel文件预览

一、插件 通过xlsx插件解析excel数据&#xff0c;对解析后的html组件进行渲染展示。 npm install xlsx 二、完整代码 <template><!-- excel文件预览 --><divelement-loading-text"拼命加载中"element-loading-spinner"el-icon-loading"…

低代码引擎插件开发:开启开发的便捷与创新之路

OneCode授权演示 一、低代码引擎与插件开发的概述 在当今快节奏的软件开发领域&#xff0c;低代码引擎正逐渐崭露头角。低代码引擎旨在让开发人员能够以最少的代码量创建功能丰富的应用程序&#xff0c;而其中的关键组成部分便是插件开发。低代码引擎通过提供可视化的开发环境…