awk的使用

article/2025/9/22 12:14:35

awk的使用

一、awk的作用

1.用来从文本中截取字符串
2.用来匹配过滤文本,起到grep的作用

二、awk里面的分隔符

1、输入分隔符:

-F
-FS=":"
FS(input field separater)

2、输出分隔符:
定义OFS=“#”
OFS(output field separater)

awk -F: 'OFS="#"{print $1,$3,$4}'  /etc/passwd

在这里插入图片描述

三、.vimrc文件的作用

vim在启动的时候,会读取这个文件里的配置,进行加载。这个文件里面存放的是vim的命令也就是说,在vim启动的时候传递参数,告诉vim应该首先执行哪些命令

四、awk的操作处理图

在这里插入图片描述

五、awk的完整语法及工作原理

在这里插入图片描述

1、完整语法
awk -F:  'BEGIN{print "###start@@@@"} $3>500&&$3<2000{print $1,$3} END{print "###end####"}' /etc/passwd###start@@@@polkitd 999chrony 998nginx 997mahaoliang 1000daifurong 1001chenyulin 1002xieshan 1003bashzhang 1004bashzhang1 1005liu1 1006zhangliu1 1007liu 1008liu2 1009wujiaxi 1010  fengdeyong ###end####
2、工作原理

2.1、模式匹配

精准匹配:必须一模一样,不能多也不能少
[root@lamp-test logs]# awk -F: '$1 == "feng1" && $3>1009 {print $1,$7,$3}' /etc/passwd
feng1 /bin/bash 1012
[root@lamp-test logs]# 
模糊匹配: 包含,可以多不能少
[root@lamp-test logs]# awk -F: '$1 ~ /[0-9]$/ && $3>1009 {print $1,$7,$3}' /etc/passwd

2.2、常用的内置变量

NR number of record 行号
NF number of field 字段数
$NF  -->最后一个字段 
$(NF-1) --> 倒数第2个字段
3、awk命令操作符

在这里插入图片描述

六、查看内存使用的命令:free

[root@xiaoliu lianxi]# free -mtotal        used        free      shared  buff/cache   available
Mem:           1790         191         804           8         793        1447
Swap:          2047           0        2047
[root@xiaoliu lianxi]# free -htotal        used        free      shared  buff/cache   available
Mem:          1.7Gi       191Mi       798Mi       8.0Mi       800Mi       1.4Gi
Swap:         2.0Gi          0B       2.0Gi

1、选项:

​	-m  以M为单位显示内存的使用情况
​	-h   以人类能够读懂的格式显示

2、信息:

total    是总的物理内存(内存条的大小)
used   使用了多少内存
free    剩余多少内存
shared    共享内存消耗的空间  --》进程和进程之间通信
buff/cache
​	buff:data from memory to disk
​	cache:data from disk to memory
available:可用的内存空间一个新的进程它可以使用的内存空间==free + buff/cache

3、释放缓存:echo 3 >/proc/sys/vm/drop_caches

/proc:是内核文件系统,内核是一个软件,控制操作系统的硬件,管理cpu,内存,磁盘,网卡等硬件
/proc文件系统,也是消耗内存的空间
[root@xiaoliu lianxi]# free -htotal        used        free      shared  buff/cache available
Mem:    1.7Gi       192Mi        63Mi       8.0Mi    1.5Gi       1.4Gi
Swap:         2.0Gi          0B       2.0Gi
[root@xiaoliu lianxi]# echo 3 >/proc/sys/vm/drop_caches #告诉内核取释放缓存空间
[root@xiaoliu lianxi]# free -htotal        used        free      shared  buff/cache   available
Mem:          1.7Gi       182Mi       1.5Gi       8.0Mi       110Mi       1.4Gi
Swap:         2.0Gi          0B       2.0Gi

4、查看什么时候使用交换分区

# 默认是当物理内存使用了70%的时候,就开始使用交换分区
[root@xiaoliu lianxi]# cat /proc/sys/vm/swappiness 
30
内核参数优化,提升进程使用的效率,告诉系统尽可能的多使用物理内存,物理内存速度快
[root@xiaoliu lianxi]# echo 0 >/proc/sys/vm/swappiness 
[root@xiaoliu lianxi]# cat /proc/sys/vm/swappiness 
0
[root@xiaoliu lianxi]# echo 10 >/proc/sys/vm/swappiness 
[root@xiaoliu lianxi]# cat /proc/sys/vm/swappiness 
10

5、内核参数配置文件
系统开机启动的时候,内核对读取这个配置文件,进行相关参数的设置/etc/sysctl.conf

七、压缩连续的字符串:tr

将连续的空格压缩成一个空格

tr -s “ ”

八、小练习熟悉awk的使用

在这里插入图片描述

1.只显示df -h结果的第一列文件系统df -Th|awk '{print $1}'
2.显示passwd文件的第5行和第10行的行号和用户名awk -F: 'NR==5||NR==10{print NR,$1}' /etc/passwd
3.使用NF变量显示passwd文件倒数第二列的内容awk -F: '{print $(NF-1)}' /etc/passwd
4.显示passwd文件中第5到第10行的用户名awk -F: 'NR>=5&&NR<=10{print $1}' /etc/passwd
5.显示passwd文件中第7列不是bash的用户名awk -F: '$7 !~/bash/{print $1}' /etc/passwd
6.显示passwd文件中行号是5结尾的行号和整行内容awk -F: 'NR ~/5/{print NR,$0}' /etc/passwd
7.用ifconfig/ip add  只显示ip
yum  install net-tools  -y -->安装ifconfig命令的软件ifconfig|awk 'NR==2 {print $2}'
8.ifconfig 命令后使用awk显示ens33的入站流量和出站流量(字节)ifconfig |awk 'NR==5||NR==7 {print $1,$5}
9.统计/etc/passwd文件里以r开头的用户的数量,并且显示出用户名awk -F: '$1 ~/^r/{print $1}' /etc/passwd
10.显示每隔2秒的流量的变化watch -n 2 -d "ifconfig|awk 'NR==5{print $5}'"

九、awk使用shell变量

[root@xiaoliu lianxi]# mn=mengmeng
[root@xiaoliu lianxi]# awk -F: "\$1 ~/$mn/{print \$0}" /etc/passwd
shimengmeng:x:1009:1009::/home/shimengmeng:/bin/bash
mengmeng:x:1073:1073::/home/mengmeng:/bin/bash
mengmeng1:x:1074:1074::/home/mengmeng1:/bin/bash

十、awk中的字段求和

[root@xiaoliu lianxi]# awk 'NR>1{sum+=$3}END{print sum}' gread.txt 480
[root@xiaoliu lianxi]# awk 'BEGIN{num=0}NR>1{sum+=$3}END{print sum}' gread.txt 
480

十一、awk里面的内置函数(lentgh,substr)

1、统计没有设置密码的用户的数量,同时输出用户名

awk -F: 'length($2)<=2 {print $1;sum++}END{print sum}' /etc/shadow

2、统计没有设置密码的用户的数量,同时输出用户名前2个字符

awk -F: 'length($2)<=2 {print substr($1,1,2);sum++}END{print sum}' /etc/shadow

十二、awk里面的流程控制if分支

[root@localhost lianxi]# cat /etc/passwd|awk -F: '{if (length($1)==3) print $0}'
bin:x:1:1:bin:/bin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
liu:x:1008:1008::/home/liu:/bin/bash
[root@localhost lianxi]#
[root@localhost lianxi]# cat /etc/passwd|awk -F: '{if (length($1)==3) print $0 ; else print $1}'

练习1:

用户的类型:
uid==0  超级用户
uid在1~999 系统用户
uid>=1000 普通用户
# 方法一、
awk -F: '{if($3 == 0)print $1"超级用户";else if($3>=1 && $3<=999) print $1"系统用户";else if($3>=1000) print $1"普.通用户"}' /etc/passwd
# 方法二、
[root@localhost lianxi]# awk -F: '{if($3==0) print $1"是超级用户";else if($3>1&&$3<=999) print $1"是系统用户";else print $1"是普通用户"}'  /etc/passwd

练习2:

3个变量: 统计3种类型的用户, 统计用户类型的个数
用户的类型:
uid==0  超级用户
uid在1~999 系统用户
uid>=1000 普通用户
awk -F: '{if($3 == 0){print $1"超级用户";num1++;} else if($3>=1 && $3<=999){print $1"系统用户";num2++;} else if($3>=1000){print $1"普通用户";num3++}}END{print "超级用户的数量:"num1,"系统用户的数量:"num2,"普通用户的数量:"num3}' /etc/passwd

注:if语句后面执行多个命令的时候,使用{}括起来,最后的命令接;结尾,外面的else if和else前面不需要接;了

十三、awk里面的for循环格式

for (i=0;i<10;i++) {print $i;}
for (i in array) {print array[i]}

十四、awk里面的数组

统计每个省份总共得到了多少票数

[root@xiaoliu lianxi]# cat vote.txt 山东 aa  2河南 bb  3江西 cc 3湖南 aa 40山东 bb 10江西 dd 6河南 cc 3湖南 cc 3awk '{vote[$1]+=$3}END{for (i in vote) print i,vote[i]}' vote.txt |sort -k 2 -n河南 6江西 9山东 12湖南 43

十五、awk里的综合练习

练习1:

对nginx的日志文件access.log进行分析,分析出单个ip地址累计下载获取的文件大小的总数(对每次访问数据的大小进行求和),显示下载总数最大的前100个ip地址和下载文件大小,按照下载文件大小的降序排列,显示格式如下:
175.8.134.239 3456
172.105.77.209 78956

61.147.15.67 112345678

#答案:
awk '{access[$1]+=$10}END{for (i in access) print i,access[i]}' access.log |sort -k 2 -nr|head -100
练习二:

以下是nginx日志的字段含义

$time_iso8601|$host|$http_cf_connecting_ip|$request|$status|$body_bytes_sent|$http_referer|$http_user_agent
-------------------------------------
2019-04-25T09:51:58+08:00|a.google.com|47.52.197.27|GET /v2/depth?symbol=aaa HTTP/1.1|200|24|-|apple
2019-04-25T09:52:58+08:00|b.google.com|47.75.159.123|GET /v2/depth?symbol=bbb HTTP/1.1|200|407|-|python-requests/2.20.0
2019-04-25T09:53:58+08:00|c.google.com|13.125.219.4|GET /v2/ticker?timestamp=1556157118&symbol=ccc HTTP/1.1|200|162|-|chrome
2019-04-25T09:54:58+08:00|d.shuzibi.co|-||HEAD /justfor.txt HTTP/1.0|200|0|-|-
2019-04-25T09:55:58+08:00|e.google.com|13.251.98.2|GET /v2/order_detail?apiKey=ddd HTTP/1.1|200|231|-|python-requests/2.18.4
2019-04-25T09:56:58+08:00|f.google.com|210.3.168.106|GET /v2/trade_detail?apiKey=eee HTTP/1.1|200|24|-|-
2019-04-25T09:57:58+08:00|g.google.com|47.75.115.217|GET /v2/depth?symbol=fff HTTP/1.1|200|397|-|python-requests/2.18.4
2019-04-25T09:58:58+08:00|h.google.com|47.75.58.56|GET /v2/depth?symbol=ggg HTTP/1.1|200|404|-|safari
2019-04-25T09:59:58+08:00|i.google.com|188.40.137.175|GET /v2/trade_detail?symbol=hhh HTTP/1.1|200|6644|-|-sfdf
2019-04-25T10:01:58+08:00|j.google.com|2600:3c01:0:0:f03c:91ff:fe60:49b8|GET /v2/myposition?apiKey=jjj HTTP/1.1|200|110|-|scan

2.1、计算每分钟的带宽(body_bytes_sent)

#答案
[root@xiaoliu lianxi]# awk -F"|" '{width[substr($1,1,16)]+=$6}END{for (i in width) print i,width[i]}' width.txt |sort -n2019-04-25T09:51 242019-04-25T09:52 4072019-04-25T09:53 1622019-04-25T09:54 2002019-04-25T09:55 2312019-04-25T09:56 242019-04-25T09:57 3972019-04-25T09:58 4042019-04-25T09:59 66442019-04-25T10:01 110

2.2、统计每个URI(即不带问号?前面的内容)的每分钟的频率/v2/myposition?apiKey=jjj 中的/v2/myposition

#答案
[root@xiaoliu lianxi]# awk -F"[|?]" '{frequn[substr($1,1,16)substr($4,5,16)]+=1}END{for (i in frequn) print i,frequn[i]}' width.txt |sort -n2019-04-25T09:51/v2/depth 12019-04-25T09:52/v2/depth 12019-04-25T09:53/v2/ticker 12019-04-25T09:54 12019-04-25T09:55/v2/order_detail 12019-04-25T09:56/v2/trade_detail 12019-04-25T09:57/v2/depth 12019-04-25T09:58/v2/depth 12019-04-25T09:59/v2/trade_detail 12019-04-25T10:01/v2/myposition 1

http://chatgpt.dhexx.cn/article/9IyWVAgv.shtml

相关文章

AWK基础教程

前言 之前针对WorkerHub小程序做的数据分析文章 互联网卷王花落谁家&#xff1f; 收到了一些小伙伴的回复&#xff0c;点名要学习数据分析&#xff0c;其实我也是一知半解&#xff0c;想着来写几篇文章简单聊下我分析的过程。 首先是数据清洗和统计了&#xff0c;这块我并没有…

详解AWK的用法

Awk工具介绍 AwK是一种处理文本文件的语言&#xff0c;是一个强大的文本分析工具。 它是专门为文本处理设计的编程语言&#xff0c;也是行处理软件&#xff0c;通常用于扫描、过滤、统计汇总工作。数据可以来自标准输入也可以是管道或文件 20世纪70年代诞生于贝尔实验室&#…

Shell脚本文本三剑客之AWK

目录 一、AWK工具介绍 1.1AWK命令的基本格式 1.2AWK工作原理 1.3常见的内建变量&#xff08;可直接用&#xff09; 二、实例 2.1打印文本内容 案例1&#xff1a;打印磁盘已经使用情况 案例2:打印字符串 案例3&#xff1a;打印字符串确定文件有多少行 2.2根据$n提取字…

AWK常用技巧

1.1 介绍 awk其名称得自于它的创始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母。实际上 AWK 的确拥有自己的语言&#xff1a; AWK 程序设计语言 &#xff0c; 三位创建者已将它正式定义为“样式扫描和处理语言”。 它允许您创建简短的程序&#xff…

AWK用法全解

一、awk介绍 awk是Linux自带的一个逐行扫描的文本处理工具&#xff0c;支持正则表达式、循环控制、条件判断、格式化输出。AWK自身带有一些变量&#xff0c;可以在书写脚本时调用。 二、基本语法格式 2.1、在shell中使用awk awk [option] 代码块 文件名 option的选项及含义…

awk文本工具

awk 一、什么是awk&#xff1f;二、awk的工作原理三、命令格式四、管道符号调用四、getline 一、什么是awk&#xff1f; awk命令是一种编程语言&#xff0c;用于在linux/unix下对文本和数据进行处理。 而且它支持用户自定义函数和动态正则表达式等先进功能&#xff0c;是linux…

shell之三剑客awk(基础用法)

文章目录 一、awk概述1、awk工作原理 二、awk的格式三、内置变量演示1、【$n】进行演示2、【$0】的演示3、【NF】(多少列) 和 【NR】(多少行)的演示4、面试题5、BEGIN开始和END结尾6、模糊匹配7、关于数值与字符串的比较 四、总结 一、awk概述 AWK是一种处理文本文件的语言&am…

《J2EE 学习笔记 之 idea 搭建 SSM 项目》

J2EE 学习笔记 之 idea 搭建 SSM 项目 详细步骤 step1 step2 step3 step4 step5

对于J2EE体系架构的理解

一、何为J2EE&#xff1f; J2EE架构是使用Java技术开发企业级应用的一种事实上的工业标准&#xff0c;它是Java技术不断适应和促进企业级应用过程中的产物。Java平台有三个版本&#xff1a;适用于小型设备和智能卡的J2ME(Java 2 Platform Micro Edition)、适用于桌面系统的J2S…

idea创建j2ee_IntelliJ IDEA 创建J2EE项目

IntelliJ IDEA 创建J2EE项目 方式一 1.File--NewProject--next&#xff0c;取个名字&#xff0c;意味着你的文件存放地。 2.Next--Next--勾选Web Application--Finish。 3.Edit Configurations--添加--tomcat--local--找到WEB容器所地 4.&#xff2f;&#xff2b;&#xff0c;这…

J2EE总结

1.J2EE介绍 1.企业级java简史 一.Java版本 (1)J2ME,功能非常有限&#xff0c;用于嵌入式设备 (2)J2SE包含原始的核心类库&#xff0c;用于桌面应用程序和浏览器中的Applet (3)J2EE&#xff0c;功能非常全面&#xff0c;用于数据处理和服务器端应用 二.对现有和新技术的继承&…

关于J2ee

学习完j2se&#xff0c;对Java有了大概的了解&#xff0c;但是对接下来要学习的j2ee却有点囧&#xff0c;因为从概念里也get不到它到底是个什么东西&#xff01;so&#xff0c;从整体看j2ee&#xff0c;让百度告诉我答案。 Java2平台&#xff08;1998年12月&#xff0c;SUN公司…

J2EE架构简介

J2EE 体系结构简介 J2EE &#xff08;Java 2 Platform, Enterprise Edition&#xff09;即Java2平台企业版&#xff0c;它提供了基于组件的方式来设计、开发、组装和部署企业应用。J2EE使用多层分布式的应用模型&#xff0c;这个多层通常通过三层或四层来实现&#xff1a; ①客…

概览J2EE

J2EE是一种基于组件与平台无关的技术架构。 J2EE核心是一组技术规范和指南&#xff0c;包含各类的组件、服务架构、以及技术层次。 一、 J2EE的体系结构 先来看一些概念&#xff1a; 1、组件&#xff1a;是提供业务服务的独立功能单元&#xff0c;易操作&#xff0c;属性和实…

J2EE 全面简介

J2EE 全面简介 刘湛 (jeru@163.net) 武汉大学信息与计算科学系学士2001 年 7 月 本文从五个方面对J2EE进行了比较全面的介绍。从J2EE的概念说起,到它的优势,到J2EE典型的四层模型,和它的框架结构,最后是J2EE十三种核心技术的一个简介。本文分门别类的对J2EE中的服务,组件,…

自己搭建一个局域网(两台电脑)

1.首先保证两台电脑都有联网 2.更改适配器把两台电脑设为固定IP,同时让分配的IP地址相邻 3.使用ping命令&#xff0c;看是否能ping通。是&#xff0c;创建完成。否&#xff0c;有问题&#xff0c;重新分配固定IP后尝试。 哎&#xff0c;学校固定IP好像还要申请&#xff0c;哈哈…

如何用笔记本创建局域网

怎么用笔记本创建局域网呢&#xff1f;会不会很难&#xff1f; 现在教一个简单的方法创建局域网。 1、首先使用快捷键“WinR”打开cmd。 2、接着在弹出的窗口输入netsh wlan set hostednetwork modeallow ssid(这里输入你想给你局域网起的名字) key(这里输入自己设定的密码)&…

搭建小型局域网

Packet Tracer 是 Cisco 公司针对 CCNA 认证开发的一个用来设计、配置和故障排除网络的模拟软件。Packer Tracer 模拟器软件比 Boson 功能强大&#xff0c;比 Dynamips 操作简单&#xff0c;非常适合网络设备初学者使用。 学习任务 1、安装 Packer Tracer&#xff1b; 2、利用…

局域网组建

(1)回答问题&#xff1a;要想为计算机分配IP地址&#xff0c;必须要安装什么协议&#xff1f; 肯定是TCP/IP协议,安装及分配IP地址方法如下。按下面路径:控制面板》网络和 Internet》网络和共享中心》更改适配器设置》找到本地连接》右键属性&#xff0c;然后 1&#xff09; 添…

不同局域网内进行网络连接的建立方法

前言 在这互联网和物联网的时代&#xff0c;网络连接与通信被使用的越来越多&#xff0c;如何建立两个网络IP地址的连接 &#xff08;TCP或者UDP连接&#xff09;&#xff0c;也是一门学问。之前项目中遇到了这方面的问题&#xff0c;也被纠缠了一番&#xff0c;查阅大量资料&…