Shell脚本⑦awk

news2024/12/25 13:04:59

目录

一.awk概述

1.awk介绍

2.基本格式

3.工作原理

4.常见的内建变量

二.awk基本操作

1.打印文本内容

(1)打印磁盘使用情况

(2)打印字符串

(3)打印字符串确定文件有多少行

2.根据$n以及NR提取字段

3.根据选项指定分隔符(-F)

(1)打印所有用户名

(2)打印多列内容

(3)打印磁盘已经使用情况(去除%)

(4)取出文本中的IP地址及时间

(5)取出文本中的主机并返回

4.根据关键字提取所在行

(1)提取以root开头的行

(2)提取root所在行

(3)提取nologin结尾的行

5.使用BEGIN输入包含指定字符

6.FS:指定每行文本的字段分隔符,默认为空格或制表符,与-F相同

7.NF:处理当前行的整行内容

(1)当前处理行的字段个数

(2)打印出每行最后一个字段

(3)打印出每行倒数第二字段

8.NR:当前处理行的行号

(1)当前处理行的行号

(2)NR==n代表行号等于什么

(3)NR%2==0取偶数行

(4)NR%2==1取奇数行

(5)NR==1,NR==4取区间行

(6)取UID数值范围$n>1000

三.试题练习

1.统计/etc/fstab文件中每个文件系统类型出现的次数

2. 统计/etc/fstab文件中每个单词出现的次数

​编辑

3.将某日志文件访问用户的IP地址,在第三列冒号隔开,统计出访问量前十的IP地址

4.提取出字符串Yd$C@M05MB%9&Bdh7dq+YVixp3vpw中的所有数字


一.awk概述

1.awk介绍

awk:Aho, Weinberger, Kernighan,报告生成器,格式化文本输出,GNU/Linux发布的AWK目前由自由软件基金会(FSF)进行开发和维护,通常也称它为 GNU AWK

2.基本格式

awk [选项] ‘模式条件{操作}’ 文件1 文件2...
awk -f|-v 脚本文件 文件1 文件.....

3.工作原理

前面提到 sed 命令常用于一整行的处理,而 awk 比较倾向于将一行分成多个“字段”然后再进行处理,且默认情况下字段的分隔符为空格或 tab 键。awk 执行结果可以通过 print 的功能将字段数据打印显示。

4.常见的内建变量

FS列分隔符。指定每行文本的字段分隔符,默认为空格或制表位。与“-F”作用相同
NF当前处理的行的字段个数
NR当前处理的行的行号
$0当前处理的行的整行内容
$n当前处理行的第n个字段
FILENAME被处理的文件名
RS行分隔符
$NF最后一段
$(NF-1)倒数第二段

二.awk基本操作

1.打印文本内容

  • awk可以将自动将多个空格压缩成一个空格

  • 打印字符串需要加双引号

(1)打印磁盘使用情况
df |awk '{print $5}'

(2)打印字符串
awk '{print "hello"}'

(3)打印字符串确定文件有多少行
awk '{print "hello"}' /etc/fstab 
 
awk '{print "hello"}' /etc/fstab |wc -l
 
cat /etc/fstab |wc -l

2.根据$n以及NR提取字段

ifconfig ens33|sed -n '2p'|awk '{print $2}'

ifconfig ens33 |awk 'NR==2{print $2}'

注意:$n代表提取第几列

3.根据选项指定分隔符(-F)

(1)打印所有用户名
cat /etc/passwd|awk -F":" '{print $1}'
或
cat /etc/passwd|awk -F: '{print $1}'

(2)打印多列内容
cat /etc/passwd|awk -F":" '{print $1,$2}'
 
cat /etc/passwd|awk -F":" '{print $1":"$2}'
 
cat /etc/passwd|awk -F":" '{print $1"+"$2}'

(3)打印磁盘已经使用情况(去除%)
#使用两条awk命令
df|awk '{print $5}'|awk -F% '{print $1}'
 
#使用一次awk命令
df|awk -F"[ %]+" '{print $5}'
 
##也可以使用( |%)代表或者
df|awk -F"( |%)+" '{print $5}'

(4)取出文本中的IP地址及时间
##文本内容##
vim test.txt 
 
58.87.87.99 - - [09/Jun/2020:03:42:43 +0800] "POST /wp-cron.php?
doing_wp_cron=1591645363.2316548824310302734375 HTTP/1.1" ""sendfileon
128.14.209.154 - - [09/Jun/2020:03:42:43 +0800] "GET / HTTP/1.1" ""sendfileon
64.90.40.100 - - [09/Jun/2020:03:43:11 +0800] "GET /wp-login.php HTTP/1.1" ""sendfileo
 
 
##提取##
cat test.txt |sed '2d'|awk -F"[[ ]"  '{print $5"\t"$1}'

(5)取出文本中的主机并返回
##文本内容##
vim host.txt 
 
1 www.kgc.com
2 mail.kgc.com
3 ftp.kgc.com
4 linux.kgc.com
5 blog.kgc.com
 
##提取##
cat host.txt |awk -F "[. ]" '{print $2}' >>host.txt

4.根据关键字提取所在行

(1)提取以root开头的行
cat /etc/passwd |awk -F":" '/^root/{print}' 

(2)提取root所在行
cat /etc/passwd |awk -F: '/root/{print}'

(3)提取nologin结尾的行
cat /etc/passwd |awk -F":" '/nologin$/{print}' 
 
##如果提取/sbin/nologin,则需要\转义/
cat /etc/passwd |awk -F":" '/\/sbin\/nologin$/{print}' 

5.使用BEGIN输入包含指定字符

  • BEGIN模式表示,在处理指定的文本之前,需要先执行BEGIN模式中指定的动作;

  • awk再处理指定的文本,之后再执行END模式中指定的动作;

  • END{ } 语句块中,往往会放入打印结果等语句。

#先定义变量x,表示执行多少次
awk 'BEGIN {x=0};/\/bin\/bash$/;{x++};END{print x}' /etc/passwd

6.FS:指定每行文本的字段分隔符,默认为空格或制表符,与-F相同

7.NF:处理当前行的整行内容

(1)当前处理行的字段个数

(2)打印出每行最后一个字段
cat /etc/passwd |awk -F: '{print $NF}'

(3)打印出每行倒数第二字段
cat /etc/passwd |awk -F: '{print $(NF-1)}'

df|awk '{print $(NF-1)}'

8.NR:当前处理行的行号

(1)当前处理行的行号
#NR写在后面则在后面显示行号
#awk  -F: '{print $1,NR}' /etc/passwd
root 1
bin 2
daemon 3
adm 4
lp 5
sync 6
shutdown 7
halt 8
 
#可以用制表符
awk  -F: '{print $1"\t"NR}' /etc/passwd
root	1
bin  	2
daemon	3
adm  	4
lp	    5
 
#NR写在前面则在前面显示行号
awk  -F: '{print NR"\t"$1}' /etc/passwd
1	root
2	bin
3	daemon
4	adm
5	lp

(2)NR==n代表行号等于什么
awk -F: 'NR==2 {print $1}' /etc/passwd

(3)NR%2==0取偶数行
awk -F: 'NR%2==0 {print $1}' /etc/passwd

(4)NR%2==1取奇数行
awk -F: 'NR%2==1 {print $1}' /etc/passwd

(5)NR==1,NR==4取区间行
awk -F: 'NR==1,NR==4 {print $1}' /etc/passwd

(6)取UID数值范围$n>1000
#取uid大于1000的行
awk -F: '$3>1000 {print}' /etc/passwd
 
 
#取uid大于等于1000的行
awk -F: '$3>=1000 {print}' /etc/passwd

三.试题练习

1.统计/etc/fstab文件中每个文件系统类型出现的次数

cat /etc/fstab |awk '/^[^#]/{print}'|awk '{print $3}'|sort |uniq -c 

2. 统计/etc/fstab文件中每个单词出现的次数

grep -Eo "\b[[:alpha:]]+\b" /etc/fstab |sort|uniq -c|sort

3.将某日志文件访问用户的IP地址,在第三列冒号隔开,统计出访问量前十的IP地址

cat log.txt |awk -F: '{print $3}' |sort |uniq -c |sort -rn |head

4.提取出字符串Yd$C@M05MB%9&Bdh7dq+YVixp3vpw中的所有数字

echo "Yd$C@M05MB%9&Bdh7dq+YVixp3vpw"|grep -E -o "[0-9]+"

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

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

相关文章

http和https的区别是什么?https有什么优缺点?

HTTP(Hypertext Transfer Protocol,超文本传输协议)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。这个简单模型是早期Web成功的有功之臣,因为它…

【JVM】运行时数据区域,内存如何分配和对象在内存中的组成

目录 一.运行时数据区域 1.线程独享 2.线程共享 二.内存如何分配 1.指针碰撞法 2.空闲列表法 3.TLAB 三.对象在内存中的组成 ​编辑1.对象头 2.实例数据 3.对齐填充 一.运行时数据区域 1.线程独享 (1)栈 虚拟机栈:每个 Java 方法在…

如何在centos云服务器上持续运行

一、直接上命令 cd到jar包所在目录 输入命令运行 nohup java -jar xxx.jar & 退出当前命令 二、云服务器上安装宝塔管理面板 直接用宝塔的进程守护,设置好当前进程输入参数保存就ok

Linux第40步_移植ST公司的uboot

一、查看ST公司的uboot源码包 ST公司的uboot源码包在虚拟机中的路径: “/home/zgq/linux/atk-mp1/stm32mp1-openstlinux-5.4-dunfell-mp1-20-06-24/sources/arm-ostl-linux-gnueabi/u-boot-stm32mp-2020.01-r0”; “u-boot-stm32mp-2020.01-r0”就是S…

Android MTE技术详解

1.MTE概念 MTE(内存标记扩展)是ARM v8.5-A新增的一项缓解内存安全的机制。在Android Linux现有的安全机制中,类似的机制有ASAN、HWSAN。但两者因为性能开销代价高昂,不适用于广泛部署(仅调试使用)。MTE当前…

springboot131企业oa管理系统

企业OA管理系统 摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了企业OA管理系统的开发全过程。通过分析企业OA管理系统管理的不足,创建了一个计算机管理企业OA管理系统的方案。文章介绍了企业OA管…

定制红酒:为您的爱情、友情、亲情定制专属红酒

红酒,这种充满浪漫与情感的饮品,早已超越了单纯的味觉享受,成为人们表达情感、传递心意的载体。云仓酒庄洒派定制红酒,正是为那些珍视爱情、友情、亲情的人们提供了一种表达情感的新方式。 ① 爱情之酒 当你们即将步入婚姻的礼堂…

美国DDOS服务器:应对攻击的策略与技术

分布式拒绝服务(DDOS)攻击是一种常见的网络攻击手段,旨在通过大量无用的请求拥塞目标服务器,使其无法正常处理合法请求。美国作为全球互联网技术的领先者,其DDOS服务器在应对这类攻击时具有一系列先进的技术和策略。本文将详细介绍美国DDOS服…

浏览器内存泄漏排查指南

1、setTimeout执行原理 使用setInterval/setTimeOut遇到的坑 - 掘金 2、Chrome自带的Performance工具 当我们怀疑页面发生了内存泄漏的时候,可以先用Performance录制一段时间内页面的内存变化。 点击开始录制执行可能引起内存泄漏的操作点击停止录制 如果录制结束…

C# OpenCvSharp DNN Gaze Estimation 视线估计

目录 介绍 效果 模型信息 项目 代码 frmMain.cs GazeEstimation.cs 下载 C# OpenCvSharp DNN Gaze Estimation 介绍 训练源码地址:https://github.com/deepinsight/insightface/tree/master/reconstruction/gaze 效果 模型信息 Inputs ----------------…

利用牛顿方法求解非线性方程(MatLab)

一、算法原理 1. 牛顿方法的算法原理 牛顿方法(Newton’s Method),也称为牛顿-拉弗森方法,是一种用于数值求解非线性方程的迭代方法。其基本思想是通过不断迭代来逼近方程的根,具体原理如下: 输入&#…

菜单栏应用管理 -- Bartender 4

Bartender 4是一款旨在优化和简化Mac菜单栏管理的强大工具。它具有以下特色功能: 组织和管理菜单栏图标:Bartender 4允许用户轻松组织和管理菜单栏中的图标,可以隐藏不常用的图标,保持菜单栏的整洁和简洁。同时,用户还…

RAG——应用——七个最常见的故障点

近日,国外研究者发布了一篇论文《Seven Failure Points When Engineering a Retrieval Augmented Generation System》,探讨了在实际工程落地RAG应用过程中容易出的七类问题。 论文地址:https://arxiv.org/pdf/2401.05856.pdf 一、丢失内容&…

MacOS安装反编译工具JD-GUI以及解决无法打开的问题

目录 一.下载地址 二.安装 三.问题 四.解决办法 1.显示包内容 2.找到Contents/MacOS/universalJavaApplicationStub.sh 3.修改sh文件 4.保存后再次打开即可 一.下载地址 Java Decompiler 二.安装 将下载下来的 jd-gui-osx-1.6.6.tar 解压,然后将 JD-GUI.a…

提升工作效率,畅享便捷PDF编辑体验——Adobe Acrobat Pro DC 2023

作为全球领先的PDF编辑软件,Adobe Acrobat Pro DC 2023将为您带来前所未有的PDF编辑体验。无论您是个人用户还是企业用户,Adobe Acrobat Pro DC 2023将成为您提高工作效率、简化工作流程的得力助手。 一、全面编辑功能 Adobe Acrobat Pro DC 2023提供了…

如何写出让用户身临其境的画面感文案?

许多小伙伴在写文案时经常会碰到这样的困境,就是自己写得文案用了大量辞藻但是没有效果。因为在信息爆炸的时代下,用户天生不喜欢抽象的东西,只有具象化的东西才能让人不费脑子,所以我们要尽可能的将文案视觉化,去写有…

分享外贸人的一些趣事

某日晚上突然失眠,然后就莫名地回忆起与一些客户沟通的过往,有时候感觉哭笑不得,有的时候又感觉无可奈何。 于是想总结一下在和客户沟通中的那种小惊喜,小惊讶,小郁闷,以及还有一些小小的感动。 先说一说…

数据防泄密方案公司(dlp数据防泄密厂商排名)

在当今数字化时代,数据已经成为了企业最重要的资产之一。然而,随着企业信息化的不断深入,数据泄露的风险也越来越大。为了保护企业的核心数据,越来越多的企业开始重视数据防泄密工作,并寻求专业的数据防泄密方案提供商…

Python入门到精通(五)——Python数据容器

Python数据容器 前言 一、list 列表 1、定义 2、列表的下标索引 3、常用操作 4、列表的遍历 二、tuple 元组 1、定义 2、常用操作 三、str 字符串 1、定义 2、常用操作 四、容器序列的切片 五、set 集合 1、定义 ​编辑 2、常用操作 六、dict 字典、映射 1、…

数据治理之路读书笔记

数据治理之路 一、数据治理的国际实践 美国——探索构建数据资产化管理体系(奥巴马2012《数字政府战略》、2020年《美国国防部数据战略》) 欧盟——从数据价值链到单一数据市场(2013《欧洲数据价值链战略》、2015《欧洲数字单一市场战略》、…