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

news2025/1/8 2:38:33

ℹ️大家好,我是练小杰,今天周五了,又是一周过去了😆
本文是有关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循环用于不断执行一系列命令,直到测试条件为假(false)
  • break语句用来终止一个重复执行的循环。这种循环可以是for、until或者while语句构成的循环。
	break [n]
  • continue语句跳过循环体中位于它后面的语句,回到本层循环的开头,进行下一次循环。
continue [n]
  • exit语句用来退出一个Shell程序,并设置退出值。
exit [n]
  • 基本语法:
while (condition) {while body}	

#或者嵌套用法
while 测试条件
	do
      语句序列
	done
  • 举例:awk 命令用于逐行读取 lxj.txt 文件,并对每一行中的每个字段进行遍历和打印
awk '{
  i=1
  while(i <= NF) {
    print $i
    i++
  }
}' 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 = 1
  do {
    print $i
    i++
  } 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.coloradmin.cn/o/2272967.html

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

相关文章

MITRE ATTCK 简介:初学者指南

网络安全已成为当今数字世界的一个关键问题。随着网络威胁日益复杂&#xff0c;组织需要一种结构化的方法来理解和应对这些风险。这就是 MITRE ATT&CK 框架发挥作用的地方。如果您是网络安全新手或刚刚开始探索威胁分析和缓解&#xff0c;本指南将为 MITRE ATT&CK 提供…

生物医学信号处理--绪论

前言 参考书籍&#xff1a;刘海龙&#xff0c;生物医学信号处理&#xff0c;化学工业出版社 生物医学信号分类 1、由生理过程自发或者诱发产生的电生理信号和非电生理信号 • 电生理信号&#xff1a;ECG/心电、EEG/脑电、EMG/肌电、 EGG/胃电、 EOG/眼电 • 非电生理信号&am…

理解 Tomcat 架构与自定义实现

前言 Tomcat 是一个轻量级的 Web 容器&#xff0c;被广泛应用于 Java Web 开发中。通过它&#xff0c;我们可以轻松地部署和运行 Web 应用。在本文中&#xff0c;我们将深入分析 Tomcat 的核心架构&#xff0c;同时结合一段代码&#xff0c;手动实现一个简化的 Tomcat 服务&am…

怎样修改el-table主题样式

起因&#xff1a;el-table有主题样式&#xff0c;部分需要单独设置 环境&#xff1a;ideanodejs插件谷歌浏览器 第一步&#xff1a;找到scss文件&#xff1a; 谷歌浏览器打开表格页面&#xff0c;ctrlshifti打开开发者工具&#xff0c;点击后鼠标移动到表格单元格上单击一下…

模型 九屏幕分析法

系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_思维模型目录。九屏幕法&#xff1a;全方位分析问题的系统工具。 1 九屏幕分析法的应用 1.1 新产品研发的市场分析 一家科技公司计划开发一款新型智能手机&#xff0c;为了全面评估市场潜力和风险&#xff0c;他们…

CSS 学习之 padding 与图形绘制

padding 属性和 background-clip 属性配合&#xff0c;可以在有限的标签下实现一些 CSS 图形绘制效果&#xff0c;我这里举两个小例子&#xff0c;重在展示可行性。 例 1:不使用伪元素&#xff0c;仅一层标签实现大队长的“三道杠”分类图标效果。此效果在移动端比较常见&…

AI在电子制造中的应用:预测质量控制

一、 电子制造中存在的质量问题 电子制造过程中&#xff0c;由于生产工艺复杂、材料种类繁多、生产环境要求高等因素&#xff0c;可能会出现各种质量问题。 常见质量问题如下&#xff1a; 1. 空焊 原因&#xff1a;锡膏活性较弱、钢网开孔不佳、铜铂间距过大或大铜贴小元件、…

(已开源-AAAI25) RCTrans:雷达相机融合3D目标检测模型

在雷达相机融合三维目标检测中&#xff0c;雷达点云稀疏、噪声较大&#xff0c;在相机雷达融合过程中提出了很多挑战。为了解决这个问题&#xff0c;我们引入了一种新的基于query的检测方法 Radar-Camera Transformer (RCTrans)。具体来说&#xff1a; 首先设计了一个雷达稠密…

WPS计算机二级•数据查找分析

听说这里是目录哦 通配符&#x1f30c;问号&#xff08;?&#xff09;星号&#xff08;*&#xff09;波形符&#xff08;~&#xff09; 排序&#x1f320;数字按大小排序以当前选定区域排序以扩展选定区域排序 文字按首字母排序 快速筛选分类数据☄️文字筛选数字筛选颜色筛选…

(leetcode算法题)191. 位1的个数 和 338. 比特位计数

对于一个正整数 n&#xff0c;如果对这个正整数执行 n & (n - 1); 的代码&#xff0c;将会得到一个整数m n 和 m的关系&#xff1a;n 的二进制表示 与 m的二进制表示中除了n最右边的1取值不同&#xff0c;其他都相同 比如114514 和 114512 的二进制表示中第2位&#xff0…

mongodb==安装prisma连接

官网下载mongodb,解压安装 Download MongoDB Community Server | MongoDB 修改bin/mongod.cfg # mongod.conf# for documentation of all options, see: # http://docs.mongodb.org/manual/reference/configuration-options/# Where and how to store data. storage:dbPat…

安装Cockpit服务,使用Web页面管理你的Linux服务器

说起管理 Linux 服务器&#xff0c;大家首先想到的使用 SecureCRT、Xshell、MobaXterm 等工具远程到服务器&#xff0c;然后使用命令行管理服务器。今天给大家介绍一个好玩的工具&#xff0c;名字叫Cockpit&#xff0c; Cockpit 是一个免费开源的基于 web 的 Linux 服务器管理…

Excel | 空格分隔的行怎么导入excel?

准备工作&#xff1a;windows&#xff0c;一个记事本程序和微软的Excel软件。 打开记事本&#xff0c;选中所有内容&#xff0c;按CtrlA全选&#xff0c;然后复制(CtrlC)。 在Excel中&#xff0c;定位到你想粘贴的单元格&#xff0c;按CtrlV进行粘贴。粘贴后&#xff0c;你会在…

深度评测uni-app x:开启跨平台开发新篇章

文章目录 一、引言1.1 跨平台开发的崛起1.2 uni-app x 初印象 二、uni-app x 核心特性评测2.1 uts 语言&#xff1a;跨平台编程新利器2.2 uvue 渲染引擎&#xff1a;原生渲染新体验2.3 强大的组件和 API 支持2.4 插件生态&#xff1a;拓展无限可能 三、与 uni-app 对比&#xf…

Mac修改文件权限

查看文件权限 ll -all 修改读写权限 sudo chmod -R arwx /usr/local/mysql-5.7.30-macos10.14-x86_64/data/a_test 修改用户分组 sudo chown -R _mysql:wheel /usr/local/mysql-5.7.30-macos10.14-x86_64/data/b_test

计算机网络——网络层—路由算法和路由协议

一、因特网的路由选择协议 • 不存在一种绝对的最佳路由算法。 • 所谓“最佳”只能是相对于某一种特定要求下得出的较为合理的选择而已。 • 实际的路由选择算法&#xff0c;应尽可能接近于理想的算法。 • 路由选择是个非常复杂的问题 • 它是网络中的所有结点共同协调工…

Linux运维相关基础知识(二)

系列文章目录 Linux常用命令 linux 账号管理与权限设定 Linux运维相关基础知识 文章目录 系列文章目录前言1. 自动任务执行at 与 atdcrontab 与 crond 2. SELinuxtty多任务管理与进程管理相关的命令/proc/* 文件的意义SELinux 3. 守护进程早期SystemV的init管理行为中daemon…

java开发springoot

阅读理解 命令之间空一行&#xff1a;表示前面的是配置 红色背景&#xff1a;表示待验证蓝色背景&#xff1a;表示常用或推荐绿色背景&#xff1a;注意/推荐 json 转 对象 import com.fasterxml.jackson.databind.ObjectMapper; public DebangResp convertJsonToObject(Stri…

MLU上使用MagicMind GFPGANv1.4 onnx加速!

文章目录 前言一、平台环境准备二、环境准备1.GFPGAN代码处理2.MagicMind转换修改env.sh修改run.sh参数解析运行 3.修改后模型运行 前言 MagicMind是面向寒武纪MLU的推理加速引擎。MagicMind能将人工智能框架&#xff08;TensorFlow、PyTorch、Caffe与ONNX等&#xff09;训练好…

Nginx——入门介绍、安装与核心配置文件结构(一/五)

目录 1.Nginx 简介1.1.背景介绍1.2.名词解释1.3.常见服务器对比1.3.1.IIS1.3.2.Tomcat1.3.3.Apache1.3.4.Lighttpd1.3.5.其他的服务器 1.4.Nginx 的优点1.4.1.速度更快、并发更高1.4.2.配置简单&#xff0c;扩展性强1.4.3.高可靠性1.4.4.热部署1.4.5.成本低、BSD 许可证 1.5.Ng…