Linux系统三剑客之AWK

news2024/11/28 2:18:55

awk的使用

awk的处理方式与格式

awk的处理方式

  • awk一次处理一行内容
  • awk可以对每行进行切片处理

示例:

awk '{print $1}'

awk的格式

命令行格式
awk [options] 'command' files

command1:pattern {awk操作命令}

操作命令:

  • 内置函数:print(),printf(),getline…
  • 控制指令:if(){…}else{…},while()
脚本格式
awk -f awk-script-file file(s)
扩展格式

BEGIN{…}{…}END{…}

示例:

以制表的形式输出passwd文件中的NR,NF,User

awk -F ':' 'BEGIN{print "Line\t Columns User"}{print NR"\t",NF"\t",$1}END{print "-------"FILENAME"-------"}' passwd

结果:

Line     Columns User
1        7       root
2        7       bin
3        7       daemon
4        7       adm
5        7       lp
6        7       sync
7        7       shutdown
8        7       halt
9        7       mail
10       7       operator
11       7       games
12       7       ftp
13       7       nobody
14       7       systemd-network
15       7       dbus
16       7       polkitd
17       7       abrt
18       7       tss
19       7       postfix
20       7       chrony
21       7       sshd
22       7       mysql
-------passwd-------

awk的内置参数

变量

  • $0 : 表示整个当前行

  • $1 : 表示第一个字段

  • $2 : 每行第二个字段
    以此类推

  • NR : 每行的记录号(行号)

  • NF : 字段数(以分隔符为参照物)

  • FILENAME : 正在处理的文件名
    示例:

awk -F ':' '{print NR,NF}' /etc/passwd

结果:

1 7
2 7
3 7
4 7
5 7
6 7
7 7
8 7
9 7
10 7
11 7
12 7
13 7
14 7
15 7
16 7
17 7
18 7
19 7
20 7
21 7
22 7   
awk -F ':' '{print FILENAME}' /etc/passwd

结果:

/etc/passwd
/etc/passwd
/etc/passwd
/etc/passwd
/etc/passwd
/etc/passwd
/etc/passwd
/etc/passwd
/etc/passwd
/etc/passwd
/etc/passwd
/etc/passwd
/etc/passwd
/etc/passwd
/etc/passwd
/etc/passwd
/etc/passwd
/etc/passwd
/etc/passwd
/etc/passwd
/etc/passwd
/etc/passwd 
  • ~ : 对变量进行更加详细的匹配

示例:

输出passwd文件中以a-c开头的用户名

awk -F ':' '$1~/^[a-c].*/{print $1}' passwd

结果:

bin
adm
abrt
chrony

输出passwd文件中不以a-c开头的用户名

awk -F ':' '$1!~/^[a-c].*/{print $1}' passwd

结果:

root
daemon
lp
sync
shutdown
halt
mail
operator
games
ftp
nobody
systemd-network
dbus
polkitd
tss
postfix
sshd
mysql
  • “>,<,==,!=” : 逻辑判断

示例:

输出passwd文件中UID大于80的用户名和UID

awk -F ':' '$3>80{print $1,$3}' passwd

结果:

nobody 99
systemd-network 192
dbus 81
polkitd 999
abrt 173
postfix 89
chrony 998

分隔符

options: -F field-separator(默认为空格)

示例:

打印passwd中的组id

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

结果:

0
1
2
3
4
5
6
7
8
11
12
14
99
192
81
999
173
59
89
998
74
27

打印passwd中的用户名组id

awk -F ':' '{print "USER:"$1,"  UID:"$3}' /etc/passwd

结果:

USER:root  UID:0
USER:bin  UID:1
USER:daemon  UID:2
USER:adm  UID:3
USER:lp  UID:4
USER:sync  UID:5
USER:shutdown  UID:6
USER:halt  UID:7
USER:mail  UID:8
USER:operator  UID:11
USER:games  UID:12
USER:ftp  UID:14
USER:nobody  UID:99
USER:systemd-network  UID:192
USER:dbus  UID:81
USER:polkitd  UID:999
USER:abrt  UID:173
USER:tss  UID:59
USER:postfix  UID:89
USER:chrony  UID:998
USER:sshd  UID:74
USER:mysql  UID:27

案例一

显示/etc/passwd每行的行号,每行的列数,对应行的用户名(print,printf)

awk -F ':' '{print "Line: " NR,"Columns: "NF,"USER: "$1}' /etc/passwd

结果:

Line: 1 Columns: 7 USER: root
Line: 2 Columns: 7 USER: bin
Line: 3 Columns: 7 USER: daemon
Line: 4 Columns: 7 USER: adm
Line: 5 Columns: 7 USER: lp
Line: 6 Columns: 7 USER: sync
Line: 7 Columns: 7 USER: shutdown
Line: 8 Columns: 7 USER: halt
Line: 9 Columns: 7 USER: mail
Line: 10 Columns: 7 USER: operator
Line: 11 Columns: 7 USER: games
Line: 12 Columns: 7 USER: ftp
Line: 13 Columns: 7 USER: nobody
Line: 14 Columns: 7 USER: systemd-network
Line: 15 Columns: 7 USER: dbus
Line: 16 Columns: 7 USER: polkitd
Line: 17 Columns: 7 USER: abrt
Line: 18 Columns: 7 USER: tss
Line: 19 Columns: 7 USER: postfix
Line: 20 Columns: 7 USER: chrony
Line: 21 Columns: 7 USER: sshd
Line: 22 Columns: 7 USER: mysql    
awk -F ':' '{printf("Line: %3s Columns: %s USER: %s\n",NR,NF,$1)}' /etc/passwd

结果:

Line:   1 Columns: 7 USER: root
Line:   2 Columns: 7 USER: bin
Line:   3 Columns: 7 USER: daemon
Line:   4 Columns: 7 USER: adm
Line:   5 Columns: 7 USER: lp
Line:   6 Columns: 7 USER: sync
Line:   7 Columns: 7 USER: shutdown
Line:   8 Columns: 7 USER: halt
Line:   9 Columns: 7 USER: mail
Line:  10 Columns: 7 USER: operator
Line:  11 Columns: 7 USER: games
Line:  12 Columns: 7 USER: ftp
Line:  13 Columns: 7 USER: nobody
Line:  14 Columns: 7 USER: systemd-network
Line:  15 Columns: 7 USER: dbus
Line:  16 Columns: 7 USER: polkitd
Line:  17 Columns: 7 USER: abrt
Line:  18 Columns: 7 USER: tss
Line:  19 Columns: 7 USER: postfix
Line:  20 Columns: 7 USER: chrony
Line:  21 Columns: 7 USER: sshd
Line:  22 Columns: 7 USER: mysql 

案例二

显示/etc/passwd中用户组id大于100的行号和用户名(if(){}else{})

awk -F ':' '{if ($3>100){ print "Line: "NR,"USER: "$1}else{print "组id小于100,不与展示"}}' passwd

结果:

组id小于100,不与展示
组id小于100,不与展示
组id小于100,不与展示
组id小于100,不与展示
组id小于100,不与展示
组id小于100,不与展示
组id小于100,不与展示
组id小于100,不与展示
组id小于100,不与展示
组id小于100,不与展示
组id小于100,不与展示
组id小于100,不与展示
组id小于100,不与展示
Line: 14 USER: systemd-network
组id小于100,不与展示
Line: 16 USER: polkitd
Line: 17 USER: abrt
组id小于100,不与展示
组id小于100,不与展示
Line: 20 USER: chrony
组id小于100,不与展示
组id小于100,不与展示  

案例三

显示/etc/passwd中的带有nologin的行的USER信息和组id信息

sed -n '/nologin/p' /etc/passwd | awk -F ':' '{print "USER: "$1,"UID: "$3}'
awk -F ':' '/nologin/{print "USER: "$1,"UID: "$3}' /etc/passwd

结果:

USER: bin UID: 1
USER: daemon UID: 2
USER: adm UID: 3
USER: lp UID: 4
USER: mail UID: 8
USER: operator UID: 11
USER: games UID: 12
USER: ftp UID: 14
USER: nobody UID: 99
USER: systemd-network UID: 192
USER: dbus UID: 81
USER: polkitd UID: 999
USER: abrt UID: 173
USER: tss UID: 59
USER: postfix UID: 89
USER: chrony UID: 998
USER: sshd UID: 74

案例四

统计当前文件夹下的文件/文件夹占用的大小

ls -l | awk 'BEGIN{size=0}{size+=$5}END{print "size is " size "M"}' 

结果:

size is 1495034M

案例五

统计/etc/passwd的账户总人数

awk  -F ':' 'BEGIN{count=0}$1!~/^$/{count++}END{print "Line is " count}' passwd

结果:

Line is 22

案例六

统计UID大于100的用户名

awk -F ':' 'BEGIN{count=0}{if($3>100) name[count++]=$1}END{for(i=0;i<count;i++){ print i,name[i]}}' passwd

有点蒙b…

案例七

统计netstat -anp状态下为LISTEN和OCONNECTED的链接数量

netstat -anp | awk '$6~/CONNECTED|LISTEN/{sum[$6]++}END{for (i in sum) {print i,sum[i]}}'

结果:

LISTEN 3
CONNECTED 42 

祝你学习愉快~~~

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

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

相关文章

(五)Ubuntu22.04+Stable-Diffusion-webui AI绘画 模型转换插件安装及其使用

一、说明 这是秋叶大佬开发的一个模型转换插件&#xff0c;秋叶整合包中自带。如果你的 Stable Diffusion WebUI 中没有这个插件&#xff0c;请使用下面这个地址安装&#xff0c;安装完成之后别忘了重启 WebUI。 模型转换插件 https://github.com/Akegarasu/sd-webui-model-c…

Python数据分析实例五、US 大选捐款数据分析

美国联邦选举委员会 (FEC) 公布了对政治竞选活动的贡献数据。这包括投稿人姓名、职业和雇主、地址和投款金额。2012 年美国总统大选的贡献数据以单个 150 MB 的 CSV 文件P00000001-ALL.csv形式提供,该文件可以通过以下pandas.read_csv加载: import pandas as pdfec = pd.r…

原生微信小程序画表格

wxml部分&#xff1a; <view class"table__scroll__view"><view class"table__header"><view class"table__header__item" wx:for"{{TableHeadtitle}}" wx:key"index">{{item.title}}</view></…

TCP/IP协议攻击与防范

一、TCP/IP协议攻击介绍 1.1 Internet的结构​ LAN&#xff1a;局域网 WAN&#xff1a;广域网 WLAN&#xff1a;无线局域网 私有IP地址与公有IP地址&#xff1f; 私有地址&#xff1a;A类&#xff1a;10.0.0.0~10.255.255.255 B类&#xff1a;172.16.0.0~172.31.255.255…

微信小程序2-地图显示和地图标记

一、index修改页面&#xff0c;让页面能够显示地图和一个添加标记的按钮。 index.wxml <scroll-view class"scrollarea" scroll-y type"list"><view class"index_container"><map id"map" style"width: 100%; h…

【C++】从C语言到C++学习指南

如果你也是从C语言一路过来的&#xff0c;那么请一起看下去吧&#xff01; 文章目录 面型对象程序设计C基础C和C一些语法区别C在非对象方面对C语言的扩充C的一些标准&#xff08;兼容旧标准&#xff09; 首先&#xff0c;在C的学习中&#xff0c;我们要时刻清醒一点&#xff1…

Fakelocation Server服务器/专业版 ubuntu

前言:需要Ubuntu系统 Fakelocation开源文件系统需求 Ubuntu | Fakelocation | 任务一 任务一 更新Ubuntu&#xff08;安装下载不再赘述&#xff09; sudo -i # 提权 sudo apt update # 更新软件包列表 sudo apt upgrade # 升级已安装的软…

探索Python的HTTP之旅:揭秘Requests库的神秘面纱

文章目录 **探索Python的HTTP之旅&#xff1a;揭秘Requests库的神秘面纱**第一部分&#xff1a;背景介绍第二部分&#xff1a;Requests库是什么&#xff1f;第三部分&#xff1a;如何安装Requests库&#xff1f;第四部分&#xff1a;Requests库的五个简单函数使用方法第五部分&…

WPF——ICON按钮制作

前言 首先ICON按钮&#xff0c;即带图标按钮&#xff0c;即图标按钮。 图标按钮在开发时&#xff0c;主要是有两种方式来进行。一是在Button的Content内添加Image&#xff0c;然后设置Image的属性Source来实现&#xff0c;这种方式主要是简单易操作&#xff0c;对于初学者来说…

【MySQL篇】持久化和非持久化统计信息的深度剖析(第一篇,总共六篇)

&#x1f4ab;《博主介绍》&#xff1a;✨又是一天没白过&#xff0c;我是奈斯&#xff0c;DBA一名✨ &#x1f4ab;《擅长领域》&#xff1a;✌️擅长Oracle、MySQL、SQLserver、阿里云AnalyticDB for MySQL(分布式数据仓库)、Linux&#xff0c;也在扩展大数据方向的知识面✌️…

三开关VUE组件

一、使用效果 <template><QqThreeSwitch v-model"value" /><!-- <SqThreeSwitch v-model"value" :options"[test1, test2, test3]"><template #left-action><div style"display: flex"><IconMoon…

线段树与树状数组 (C++)

线段树&#xff1a;基于分治思想的二叉树&#xff0c;用于维护区间信息&#xff08;区间和&#xff0c;区间最值等&#xff09;&#xff0c;区间修改和区间查询的时间复杂度为logn 叶子节点存储元素本身&#xff0c;非叶子节点存取区间信息 1.节点&#xff1a;是一个结构体&a…

vue3 uniapp 扫普通链接或二维码打开小程序并获取携带参数

vue3 uniapp 扫普通链接或二维码打开小程序并获取携带参数 微信公众平台添加配置 微信公众平台 > 开发管理 > 开发设置 > 扫普通链接二维码打开小程序 配置链接规则需要下载校验文档给后端存入服务器中&#xff0c;保存配置的时候会校验一次&#xff0c;确定当前的配…

数据结构(初阶6)---二叉树(遍历——递归的艺术)(详解)

二叉树的遍历与练习 一.二叉树的基本遍历形式1.前序遍历(深度优先遍历)2.中序遍历(深度优先遍历)3.后序遍历(深度优先遍历)4.层序遍历&#xff01;&#xff01;(广度优先遍历) 二.二叉树的leetcode小练习1.判断平衡二叉树1&#xff09;正常解法2&#xff09;优化解法 2.对称二叉…

spring boot2.7集成OpenFeign 3.1.7

1.Feign Feign是一个声明式web服务客户端。它使编写web服务客户端更容易。要使用Feign&#xff0c;请创建一个接口并对其进行注释。它具有可插入注释支持&#xff0c;包括Feign注释和JAX-RS注释。Feign还支持可插拔编码器和解码器。Spring Cloud增加了对Spring MVC注释的支持&…

基于Redis内核的热key统计实现方案|得物技术

一、Redis热key介绍 Redis热key问题是指单位时间内&#xff0c;某个特定key的访问量特别高&#xff0c;占用大量的CPU资源&#xff0c;影响其他请求并导致整体性能降低。而且&#xff0c;如果访问热key的命令是时间复杂度较高的命令&#xff0c;会使得CPU消耗变得更加严重&…

CTF-Hub SQL 报错注入(纯手动注入)

​ 当输入1时&#xff0c;发现只有查询正确&#xff0c;基本上可以判断出没有回显 开始注入(工具hackerBar) 题目是报错注入&#xff0c;方向就比较明显&#xff0c;大致说一下用到的函数和原理。 常见报错注入函数&#xff1a; 通过 floor() 报错注入通过 extractValue() …

Elasticsearch中的节点(比如共20个),其中的10个选了一个master,另外10个选了另一个master,怎么办?

大家好&#xff0c;我是锋哥。今天分享关于【Elasticsearch中的节点&#xff08;比如共20个&#xff09;&#xff0c;其中的10个选了一个master&#xff0c;另外10个选了另一个master&#xff0c;怎么办&#xff1f;】面试题。希望对大家有帮助&#xff1b; Elasticsearch中的节…

linux安装mysql8.0.40

一、下载MySQL安装包 1.查看glibc版本 rpm -qa | grep glibc 2.到mysql官网下载安装包 ​ 二、解压安装 1.上传压缩包纸/usr/local 目录下&#xff0c;解压&#xff1a; tar -xvf mysql-8.0.40-linux-glibc2.17-x86_64.tar.xz 2.重命名&#xff1a; mv mysql-8.0.40-linux-…

【大数据学习 | Spark-Core】RDD的五大特性(包含宽窄依赖)

分析一下rdd的特性和执行流程 A list of partitions 存在一系列的分区列表A function for computing each split 每个rdd上面都存在compute方法进行计算A list of dependencies on other RDDs 每个rdd上面都存在一系列的依赖关系Optionally, a Partitioner for key-value RDDs…