三剑客与正则系列-awk勇闯天下

news/2025/3/11 23:23:13/文章来源:https://www.cnblogs.com/liaofy/p/18766494

1.awk概述

四剑客 特点 擅长
find 查找文件 查找文件,与其他命令配合.
grep/egrep 过滤 过滤速度最快.
sed 过滤,取行,替换,删除 替换,修改文件内容,取行.
awk 过滤,取行,取列,统计计算,判断,循环 ... 取列,取行,统计计算
  • awk是一个语言,叫做单行脚本.

2.概述

2.1.格式

取出/etc/passwd中的第1行的第1列,第3列和最后一列
awk   -F:   'NR1{print $1,$3,$NF}' /etc/passwdawk   选项   '条件{动作}'   /etc/passwd
条件 找谁
动作 干啥

2.2.执行流程

https://www.processon.com/view/l
image

3.取行

3.1⭐⭐⭐⭐⭐案例01 : 取出/etc/passwd的第 1行

awk  'NR==1{print $0}' /etc/passwd
awk 'NR==1' passwdroot:x:0:0:root:/root:/bin/bashawk 'NR == 1' passwd'行号 等于 1'

NR Number of Record 记录号,行号

== 表示 等于

{print $0} 输出整行内容 $0表示当前行的内容. awk满足条件后默认的动作,输出这一行的内容.

上面仅取行,还可以简写为

	 awk  'NR==1' /etc/passwd

3.2.⭐⭐⭐⭐⭐案例02: 取出第2行到第5行的内容

awk 'NR>=2 && NR<=5' /etc/passwd

>= 表示大于等于

&& 表示并且

|| 表示或者

  • awk支持运算符,可以进行计算,进行对比.
awk常用的运算符 说明
== 等于
!= 不等于
> 大于
>= 大于等于
< 小于
<= 小于等于
&& 并且 & and符
|| 或者

3.3.⭐⭐⭐⭐⭐案例03: 过滤出/etc/passwd文件 中包含root或nobody的行

awk '/root|nobody/' /etc/passwd

3.4.案例04 : 从包含root的行到包含nobody的行

awk '/root/,/nobody/' /etc/passwd

4.取列

4.1⭐⭐⭐⭐⭐案例05: 使用awk取出ls -lh 的 大小列和最后一列

[root@myvps oldboy]# ls -lh /etc/hosts
-rw-r--r--. 1 root root 172 10月  9 13:02 /etc/hosts
[root@myvps oldboy]# ls -lh /etc/hosts | awk '{print $5,$9}'
172 /etc/hosts
[root@myvps oldboy]# ls -lh /etc/hosts | awk '{print $5,$NF}'
172 /etc/hosts

awk中取列的时候说明:

  • $数字,表示取列,$1 第1列 $0表示这一行
  • $NF 最后一列
  • NF Number of Field 每行有多少列
  • $(NF-1) 取出倒数第2列,一般用于正向取发生变化或数字过大.

awk输出与对齐:

使用column 命令即可或者使用\t

ll -h |awk '{print $5,$9}'|column -t
ll -h |awk '{print $5"\t"$9}'

4.2.⭐⭐⭐⭐⭐案例06: 取出/etc/passwd中的第 1列,第3列和最后一列

awk取列的时候,默认是通过空白字符进行分割的.

空白字符:空格,连续空格,tab键.

但是一些时候使用默认分隔符不够了,需要我们手动指定分隔符,通过-F选项指定

未来我们想快速取出想要的内容,选择趁手工具(选好分隔符).

选择分隔符建议: 看你目标两边是啥.

awk -F':' '{print $1,$3,$NF}' /etc/passwd

4.3.⭐⭐⭐⭐⭐案例07: 指定复杂分隔符取出ip

[root@myvps oldboy]# ip a s eth0 |awk 'NR==3'inet 10.0.0.200/24 brd 10.0.0.255 scope global noprefixroute eth0

  ⚠温馨提示: inet前面有4个空格.

逐步实现
ip a s eth0 |awk 'NR==3' |awk '{print $2}' |awk -F '/' '{print $1}'遇到空格或/就切一刀,所以4个空格切4刀,ip是第6列
[root@myvps oldboy]# ip a s eth0 |awk 'NR==3' |awk -F '[ /]' '{print $6}'
10.0.0.200遇到连续的空格或/就切一刀,所以4个空格切1刀,所以ip是第3列
[root@myvps oldboy]# ip a s eth0 |awk 'NR==3' |awk -F '[ /]+' '{print $3}'
10.0.0.200其他分隔符取出
ip a s eth0 |awk 'NR==3' |awk -F 'inet |/24' '{print $2}'

image

5.取行与取列

awk 格式 '条件{动作}'

5.1.⭐⭐⭐⭐⭐案例08: 取行+取列 取ip地址

awk  选项   '条件{动作}'   /etc/passwd
ip a s eth0 |awk -F '[ /]+' 'NR==3{print $3}'
10.0.0.200
  • 额外案例: 取出权限部分 stat /etc/hosts的0644部分
stat /etc/hosts | awk -F '[/(]'   'NR==4{print $2}'
stat /etc/hosts | awk -F '[^0-9]+'   'NR==4{print $2}'

5.2⭐⭐⭐⭐⭐案例09: 取出/etc/passwd文件中 第3列大于大于100的行,取出这行的第1列,第3列和最后 一列

  • '条件{动作}'
  • 条件: 第3列大于1000 $3 第3列用户的uid.
  • 动作: 输出显示第1列,第3列和最后一列
awk   选项   '条件{动作}'   /etc/passwd
#条件
awk -F':'  '$3>=100' /etc/passwd
#条件+动作
awk -F':'  '$3>=100{print $1,$3,$NF}' /etc/passwd |column -t 
lidao996  1001 /bin/bash
nginx     1002 /sbin/nologin

通过awk实现对某一列进行判断,然后进行提取.

5.3.⭐案例10: 如果系统swap使用超过0则输出"异常 系统开始占用swap"

条件条件1:过滤出swap条件2:第3列 使用的数量大于0
动作输出这句话 ""异常系统开始占用swap""free |awk '/Swap/  && $3 >= 0'
Swap:       2097148           0     2097148
free |awk '/Swap/  && $3 >= 0 {print "异常系统开始占用swap"}'异常系统开始占用swapfree |awk 'NR==3 && $3>0 {print "swap占用,系统异常,请排查"}'

5.4.⭐⭐⭐⭐⭐案例11: 过滤出/etc/passwd第4 列的数字是以0或1开头的行,输出第1列,第3列,第4列

  • 之前^ 或$ 表示某一行的开头或结尾.
  • 在awk中因为awk可以取列,通过列可以过滤某一列中包含什么..... 过滤某一列中以xxxx开头或结尾.
awk -F':' '$4 ~ /^[01]/' /etc/passwd
条件: 第4列的数字是以0或1开头 $4 ~ /^[01]/
动作: 输出第1列和第3列awk -F':' '$4 ~ /^[01]/ {print $1,$3}' /etc/passwd

温馨提示 awk中 通过~可以实现对某一列进行过滤

某一列中含有xxxx内容

  • ~ 表示包含的意思 $1 ~ /root/ 表示第1列中包含root
  • !~ 表示不包含

6.awk统计与计算

awk进行统计有2类案例:

1️⃣ 类似于wc -l统计次数.

2️⃣进行求和,累加.

6.1.统计次数

  • 仅仅需要统计出现了多少次,出现了多少个.可以使用wc -l方式.
说明i=i+1 先计算i+1然后把结果存放到i中.
i=i+1     i值      i=i+1值   i计算后的内容
第1行     空/0     i=0+1     i=1
第2行      1        i=1+1     i=2
第3行      2        i=2+1     i=3i=i+1 计数公式.[root@myvps ~]# awk '{i=i+1}END{print i} ' /etc/passwd
57

END{}内容会在awk读取完成文件的时候执行.

END{}一般用于输出执行结果.

i=i+1 ==== i ++

这个案例未来可以搭配awk各种条件进行统计与计算.

6.2.计算总和

seq 10 > num.txt计算num.txt每一行的数字的总和
[root@myvps ~]# seq 10 > num.txt
[root@myvps ~]# awk '{i=i+$1}END{print i}' num.txt 
55

分析执行流程

i=i+$1$1   i    i=i+$1 i结果
第1行     1   空    i=0+1   i=1
第2行     2    1    i=1+2   i=3
第3行     3    3    i=3+3   i=6
第4行     4    6    i=6+4   i=10

可以简写 i=i+$xxx ==== i+=$xxx

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

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

相关文章

实验楼-Linux(ubuntu)

实验楼-Linux(ubuntu) 1. Linux的桌面系统2. 命令 --help显示更为简单的内容软/硬连接:ln硬连接ln 目的地 硬连接名称硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。其原因如上所述,因为对应该目录的索引节点有一…

Day10_强制类型转换

VHDL强制类型转换1、STD_LOGIC_VECTOR 转 INTEGER 先将STD_LOGIC_VECTOR根据需求使用signed()转为 SIGNED 或者 使用 unsigned() 转为 UNSIGNED (signed() 和 unsigned() 在 numeric_std 中),然后使用 conv_integer() 或者 to_integer() 转为整数。 conv_integer() 和 to_in…

安装新系统的基础环境

安装新系统的基础环境 ubuntu从阿里云镜像上下载服务器版本系统,安装的时候出现curtin command in-target,需要把apt网址改为http://mirrors.163.com/ubuntu/下载man命令:apt install man看onenote笔记在~/.zshrc中最后一行加上这两行LANG=zh_CN.UTF-8 LANGUAGE=zh_CN.UTF-8cen…

Android Studio初使用

下载是困难,下载速度慢,了解了外网的知识,头一次知道。

第五章 用户身份与文件权限

第五章 用户身份与文件权限 用户身份与能力身份分类管理员UID为0:系统的管理员用户。 系统用户UID为1~999: Linux系统为了避免因某个服务程序出现漏洞而被黑客提权至整台服务器,默认服务程序会有独立的系统用户负责运行,进而有效控制被破坏范围。 普通用户UID从1000开始:…

瑞典农业育种公司OlsAro融资开发人工智能作物育种平台

瑞典农业育种初创公司OlsAro(官网:https://olsaro.com/)致力于利用人工智能和尖端植物生物技术,开发能够抵御盐分、高温和干旱等环境压力的农作物品种。今年4月OlsAro获得250万欧元种子轮融资,其首款产品为耐盐小麦,在孟加拉国的盐碱条件下,与中度耐盐品种相比,新品种的…

常用命令三

1.0 git相关 1.1 git config // 配置全局用户名 git config --global user.name "Your Name" // 配置全局邮箱 git config --global user.email "mail@example.com" // 配置Git使用store方式来处理凭证(如用户名和密码)。 // 具体来说,它会将你的Git凭证…

3.11学习苍穹外卖学习笔记

今天前半部分完成了关于redis的基础的知识学习 成功在java代码中操作redis数据库 可以完成CRUD 完成了项目中店铺打烊营业的功能还未深入学习 后半部分学习了微信小程序开发和微信登陆的功能目前正在学习 了解到微信有完整的登录校验和流程

数据资产专题报告300+份集萃解读|附PDF下载

原文链接:https://tecdat.cn/?p=40764 在当今数字经济蓬勃发展的时代,数据资产已成为推动企业创新与经济增长的关键力量。本报告汇总解读聚焦于数据资产领域,深入剖析其在多方面的发展态势。从数据资源入表的实践情况出发,探究企业在数据资产核算方面的现状;进而分析数据…

Cropin推出首个实时生成式AI驱动的农业智能平台Sage

作为世界上最先进的粮食和农业人工智能平台,Cropin Technology宣布推出Sage,这是首个由Google Gemini提供支持的实时农业智能解决方案。Cropin Sage将世界农业典型场景转换为专有的基于网格33米、1010米或55公里的电子地图,以最新技术手段确保信息来源的时效性和准确性。这使…

先正达的育种DNA大模型AgroNT到底如何?

今年6月以来,在很多公开文章和媒体上都不断看到了先正达利用AI大语言模型加速农作物种子性状研究的有关消息。 以下是官方公开消息:与“AI”同行,智绘农业 2024年6月,先正达集团与AI公司InstaDeep合作,将先正达集团专有的性状研发能力与InstaDeep的大语言模型(LLM)——农…

综述 | 基因重复驱动的演化:基因组学时代的回顾与展望

自1970年Susumu Ohno发表了其具有深远影响的著作《Evolution by Gene Duplication》以来,基因重复在生命演化过程中所扮演的重要角色逐渐被广泛认知。基因重复是新基因的主要起源机制之一,贡献了真核生物基因组中约一半的基因。近20年来,组学技术的进步使得领域内对重复基因的…