Linux脚本awk命令

目录

一. awk命令简介

1. awk版本

2. awk与vim的区别

3. awk与sed的区别

4. awk工作原理

5. awk格式

6. awk常用选项

二. awk基础用法

1. awk基础用法

2. BEGIN和END语句块

3. 指定分隔符

4. 首尾关键字

三. awk内置变量

1. FS变量

2. OFS变量

3. RS变量

4. NF变量

5. NR变量

①. 打印出限定行

②. 打印出偶数或奇数行

③. 打印出范围行

6. 自定义变量

四. awk匹配模式

1. 模式为空

2. 正则匹配

3. NR范围行匹配

4. 关系表达式

五. 条件判断

六. for循环

七. 关联数组

八. awk脚本

九. awk案例

1. 提取分区利用率

2. 提取用户名和uid号

3. 提取/bin/bash结尾的用户并统计个数

4. 提取IP地址

5. 提取出所有普通用户

6. 提取10:00 到 11:00 之间的日志

7. 提取状态次数

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

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


一. awk命令简介

1. awk版本

AWK:原先来源于 AT & T 实验室的的AWK

NAWK:New awk,AT & T 实验室的AWK的升级版 

GAWK:即GNU AWK。所有的GNU/Linux发布版都自带GAWK,它与AWK和NAWK完全兼容

在centos7中默认使用的是gawk。

2. awk与vim的区别

awk:文本处理工具,加载一行,处理一行

vim:文本处理工具,将整个文件加载到内存中处理,内存不足文件大小时,打不开文件

3. awk与sed的区别

awk:处理文件内容时,一般以行为处理单位

sed:处理文件内容时,一般以列为处理单位

4. awk工作原理

①. 执行BEGIN{action;… }语句块中的语句

②. 从文件或标准输入(stdin)读取一行,然后执行pattern{ action;… }语句块,它逐行扫描文件,
从第一行到最后一行重复这个过程,直到文件全部被读取完毕。

③. 当读至输入流末尾时,执行END{action;…}语句块

BEGIN语句块在awk开始从输入流中读取行之前被执行,这是一个可选的语句块,比如变量初始化、打印输出表格的表头等语句通常可以写在BEGIN语句块中

END语句块在awk从输入流中读取完所有的行之后即被执行,比如打印所有行的分析结果这类信息汇总都是在END语句块中完成,它也是一个可选语句块

pattern语句块中的通用命令是最重要的部分,也是可选的。如果没有提供pattern语句块,则默认执行{ print },即打印每一个读取到的行,awk读取的每一行都会执行该语句块

5. awk格式

awk  [选项]  '模式 {处理动作}'

特别注意:awk命令需要使用单引号

6. awk常用选项

选项说明
- F指定分隔符
- v指定自定义变量
- f脚本

二. awk基础用法

1. awk基础用法

注意点:

①. 可以不加导向符,默认读取后面的文件内容

②. 打印的字符串需要加双引号,否则不识别

2. BEGIN和END语句块

①. BEGIN代码块:

在读取文件之前执行,且执行一次

在BEGIN代码块中,无法使用$0或其他一些特殊变量

②. END代码块:

在读取文件完成之后执行,且执行一次

有END代码块,必须有要读取的数据(可以是标准输入)

END代码块中可以使用$0等一些特殊变量,只不过这些特殊变量保存的是最后一轮awk循环的数据

③. main代码块

读取文件时循环执行,默认情况下每读取一行,就执行一次main代码块

main代码块可以有多个

3. 指定分隔符

awk默认是以空格为分隔符,且自带压缩功能

4. 首尾关键字

^加关键字是以这个关键字为开头过滤

关键字加&是以这个关键字为结尾过滤

三. awk内置变量

内置变量说明
FS指定每行文本的字段分隔符,缺省为空格或制表符(tab)。与 “-F”作用相同 -v "FS=:"
OFS输出时的分隔符
NF当前处理的行的字段个数
NR当前处理的行的行号(序数)
$0当前处理的行的整行内容
$n当前处理行的第n个字段(第n列)
FILENAME被处理的文件名
RS行分隔符。awk从文件上读取资料时,将根据RS的定义就把资料切割成许多条记录,而awk一次仅读入一条记录进行处理。预设值是\n

1. FS变量

指定每行文本的字段分隔符,缺省(默认)为空格或制表符(tab)。

 "-F" 作用与 -v "FS=:" 相同

注意:-F 与 -FS 一起使用时,-F 的优先级高

2. OFS变量

3. RS变量

在一个文件中,默认的换行符是$,RS的作用是把默认换行符换成指定换行符

4. NF变量

NF的作用是打印每一行有多少个字段

5. NR变量

NR的作用是显示行号

①. 打印出限定行

②. 打印出偶数或奇数行

③. 打印出范围行

6. 自定义变量

四. awk匹配模式

awk  '模式{处理动作}'

PATTERN:根据pattern条件,过滤匹配的行,再做处理

1. 模式为空

如果模式为空,表示每一行都匹配成功,相当于没有额外条件

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

2. 正则匹配

/regular expression/:仅处理能够模式匹配到的行,需要用/ /括起来,固定搭配

模糊匹配,用~表示包含,!~表示不包含

#匹配从以root开头的行到以adm开头的行

awk -F: '/^root/,/^adm/{print NR,$1"\t"$3}' /etc/passwd

3. NR范围行匹配

#比较操作符
==, !=, >, >=, <, <=

#逻辑
与:&&,并且关系
或:||,或者关系
非:!,取反

4. 关系表达式

关系表达式结果为“真”才会被处理

真:结果为非0值,非空字符串

假:结果为空字符串或0值

五. 条件判断

六. for循环

for(expr1;expr2;expr3) {statement;…}
for(variable assignment;condition;iteration process) {for-body}
for(var in array) {for-body}

 awk 'BEGIN{sum=0;for(i=1;i<=100;i++){sum+=i};print sum}'
5050

 for((i=1,sum=0;i<=100;i++));do let sum+=i;done;echo $sum
5050

七. 关联数组

awk的数组为关联数组

awk 'BEGIN{weekdays["mon"]="Monday";weekdays["tue"]="Tuesday";print weekdays["mon"]}'

awk '!line[$0]++' dupfile

awk '{print !line[$0]++, $0, line[$0]}' dupfile

awk '{!line[$0]++;print $0, line[$0]}' dupfile

遍历数组:

for(var in array) {for-body}

awk 'BEGIN{students[1]="lizong";students[2]="liuzong";students[3]="kunzong";for(x in students){print x":"students[x]}}'
ss -nta|awk 'NR!=1{print $1}'|sort

ss -nta|awk 'NR!=1{state[$1]++}' 

ss -nta|awk 'NR!=1{state[$1]++}END{for(i in state){print i,state[i]}}'

八. awk脚本

将awk程序写成脚本,直接调用或执行

[root@centos7 ~]#vim  passwd.awk 
{if($3>=1000)print $1,$3}

[root@localhost data]#awk -F: -f passwd.awk /etc/passwd
nfsnobody 65534
zhangsan 1000
mysql 1001

[root@centos7 ~]#cat test.awk
#!/bin/awk -f
#this is a awk script
{if($3>=1000)print $1,$3}
[root@centos8 ~]#chmod +x test.awk
[root@centos8 ~]#./test.awk -F: /etc/passwd
nobody 65534
wang 1000
mage 1001

九. awk案例

1. 提取分区利用率

#提取分区利用率

df | awk '{print $5}'

#去除%,以多位空格和%为分隔符提取
df | awk -F"( +|%)" '{print $5}'

df | awk -F"[[:space:]]+|%" '{print $5}'

df | awk -F"[ %]+" '{print $5}'

df | awk -F"[ %]+" '{print $(NF-1)}'

2. 提取用户名和uid号

#提取用户名和uid号

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

awk -v "FS=:" '{print $1,$3}' /etc/passwd

3. 提取/bin/bash结尾的用户并统计个数

#过滤以/bin/bash结尾的行并统计个数
awk 'BEGIN {x=0};/\/bin\/bash$/;{x++};END{print x}' /etc/passwd

#过滤以非/bin/bash结尾的行并统计个数
awk 'BEGIN {x=0};/\/bin\/bash$/ {x++;print x,$0};END{print x}' /etc/passwd

4. 提取IP地址

#提取当前主机IP地址

hostname -I | awk '{print $1}'

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

ifconfig ens33 | grep mask | awk '{print $2}'

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

5. 提取出所有普通用户

#提取出普通用户

awk -F: '$3>=1000{print NR,$0}' /etc/passwd

#过滤出uid号大于等于1000的用户

6. 提取10:00 到 11:00 之间的日志

#提取10:00到12:00之间的日志

awk '/10:00/,/12:00/{print $0}' 日志文件

7. 提取状态次数

ss -nta|awk 'NR!=1{print $1}'|sort

ss -nta|awk 'NR!=1{state[$1]++}' 

ss -nta|awk 'NR!=1{state[$1]++}END{for(i in state){print i,state[i]}}'

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

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

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

grep -Eo "\b[a-zA-Z]+\b" /etc/fstab | wc -l

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

线程安全的问题以及解决方案

线程安全 线程安全的定义 线程安全:某个代码无论是在单线程上运行还是在多线程上运行,都不会产生bug. 线程不安全:单线程上运行正常,多线程上运行会产生bug. 观察线程不安全 看看下面的代码: public class ThreadTest1 {public static int count 0;public static void main…

Windows驱动中数字签名认证(使用 ci.dll)

1.背景 对于常规应用程序来说&#xff0c;在应用层可以使用 WinVerifyTrust, 在驱动层使用常规的 API无法使用&#xff0c;自己分析数据又太麻烦。 但在内核中 ci.dll 包装了数据签名验证相关的功能&#xff0c;我们可以使用该 dll 来实现我们的数字签名验证。 详细的分析见《内…

《异常检测——从经典算法到深度学习》24 用于单变量时间序列异常检测的端到端基准套件

《异常检测——从经典算法到深度学习》 0 概论1 基于隔离森林的异常检测算法 2 基于LOF的异常检测算法3 基于One-Class SVM的异常检测算法4 基于高斯概率密度异常检测算法5 Opprentice——异常检测经典算法最终篇6 基于重构概率的 VAE 异常检测7 基于条件VAE异常检测8 Donut: …

面试题:千万量级数据中查询 10W 量级的数据有什么方案?

文章目录 前言初版设计方案整体方案设计为&#xff1a;技术方案如下&#xff1a;CK 分页查询使用 ES Scroll Scan 优化深翻页耗时数据 ESHbase 组合查询方案ES 查询的两个阶段组合使用 Hbase RediSearchRedisJSON 优化方案RediSearch 性能数据RedisJSON 性能数据 总结 前言 在…

C++跨目录include问题

不同文件夹下使用预处理器指示符#include 使用举例 假设我们有如下一个工程&#xff0c;其中包含了几个源代码和头文件&#xff0c;其中main.cpp是主源代码文件&#xff0c;里面含有main函数&#xff1a; 在foldder main中包含&#xff1a;func4.hpp&#xff0c;func4.cpp&am…

MIT线性代数笔记-第21讲-特征值,特征向量

目录 21.特征值&#xff0c;特征向量打赏 21.特征值&#xff0c;特征向量 对于一个方阵 A A A&#xff0c;若 A x ⃗ λ x ⃗ A \vec{x} \lambda \vec{x} Ax λx &#xff0c;即 A x ⃗ A \vec{x} Ax 平行于 x ⃗ \vec{x} x &#xff0c;那么 λ \lambda λ是 A A A的特征值…

100W用户、8000W流量在线贺卡应用架构如何优化?

文章目录 &#x1f50a;博主介绍&#x1f964;本文内容&#x1f4e2;文章总结&#x1f4e5;博主目标 &#x1f50a;博主介绍 &#x1f31f;我是廖志伟&#xff0c;一名Java开发工程师、Java领域优质创作者、CSDN博客专家、51CTO专家博主、阿里云专家博主、清华大学出版社签约作…

FL Studio2024水果编曲软件21.2.0中文版本下载更新

FL Studio2024是功能强大的音乐制作解决方案&#xff0c;使用旨在为用户提供一个友好完整的音乐创建环境&#xff0c;让您能够轻松创建、管理、编辑、混合具有专业品质的音乐&#xff0c;一切的一切都集中在一个软件中&#xff0c;只要您想&#xff0c;只要您需要&#xff0c;它…

Leetcode—409.最长回文串【简单】

2023每日刷题&#xff08;四十八&#xff09; Leetcode—409.最长回文串 强烈吐槽&#xff01;&#xff01;&#xff01; 非常不理解&#xff0c;同样的代码&#xff0c;为什么C跑不了C就跑得了&#xff0c;力扣编译器是对C语言有歧视吗&#xff1f;&#xff1f;&#xff1f;…

【C++练级之路】【Lv.1】C++,启动!(命名空间,缺省参数,函数重载,引用,内联函数,auto,范围for,nullptr)

目录 引言入门须知一、命名空间1.1 作用域限定符1.2 命名空间的意义1.3 命名空间的定义1.4 命名空间的使用 二、C输入&输出2.1 cout输出2.2 cin输入2.3 std命名空间的使用惯例 三、缺省参数3.1 缺省参数概念3.2 缺省参数分类 四、函数重载4.1 函数重载概念4.2 函数重载分类…

6-63.圆类的定义与使用(拷贝构造函数)

本题要求完成一个圆类的定义&#xff0c;设计适当的函数&#xff1a;包括构造函数、拷贝构造函数以及析构函数&#xff0c;从而可以通过测试程序输出样例 在这里给出一组输入。例如&#xff1a; 5 输出样例&#xff1a; 在这里给出相应的输出。例如&#xff1a; Constructo…

【Unity动画】状态机添加参数控制动画切换(Animator Controller)

Unity - 手册&#xff1a;动画参数 在Unity中&#xff0c;动画状态的切换是通过Animator Controller中的过渡&#xff08;Transition&#xff09;来实现的。过渡是状态之间的连接&#xff0c;控制过渡一般都是靠调用代码参数 我们来实现一个案例&#xff1a; 创建动画状态机&a…

Pycharm修改文件默认打开方式 + CSV Editor插件使用

1、File —> Settings —> Editor —> File Types 然后将*csv添加到最上面 在plugins中下载插件&#xff0c;CSV Editor 备注&#xff1a;不在上一步的“File Types”中将*.csv设置为CSV格式&#xff0c;插件是不起作用的 就可以使用了

GitHub Actions 之自动化发布 Maven 项目

开发开源数据中台项目 datacap 时&#xff0c;之前发布版本都是通过在本地编译并部署到 maven 中央仓库中&#xff0c;这样就导致是非自动化工程&#xff0c;于是通过搜索发现 samuelmeuli/action-maven-publish 这个 github 自动化工具可以帮助我们来做这些事情&#xff0c;本…

显示隐藏文件

win 查看-勾选隐藏文件 mac shiftcommond.

食物相关的深度学习数据集合集—食物、饮料、肉类、餐具等数据集

最近收集了一大波与食物酒水相关的数据集&#xff0c;包含食物、饮料、肉类、餐具等不同等类型的数据集&#xff0c;废话不多说&#xff0c;给大家逐一介绍&#xff01;&#xff01; 1、自制啤酒配方数据库 超过20万自制啤酒配方数据库&#xff0c;数据集包含不同精酿啤酒的名…

麒麟系统自定义服务-开机自启-配置方案

方法一 &#xff1a;使用systemd的service文件自定义开机启动服务 一、kylin 添加自定义脚本服务说明 在kylin 下&#xff0c;使用管理unit的方式来控制开机自启动服务和添加自定义脚本服务。在/usr/lib/systemd/system目录下包含了各种unit文件&#xff0c;有service后缀的服…

C语言每日一题(44)删除排序链表中的重复元素 II

力扣 82 删除排序链表中的重复元素 II 题目描述 给定一个已排序的链表的头 head &#xff0c; 删除原始链表中所有重复数字的节点&#xff0c;只留下不同的数字 。返回 已排序的链表 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,3,4,4,5] 输出&#xff1a;[1,2,5]示…

【msg_msg】corCTF2021-msgmsg 套题

前言 该套题共两题&#xff0c;一道简单模式 fire_of_salvation&#xff0c;一道困难模式 wall_of_perdition&#xff0c;都是关于 msg_msg 的利用的。这题跟之前的 TPCTF2023 core 的很像&#xff08;应该是 TPCTF2023 core 跟他很像&#xff0c;bushi&#xff09;。 其中 f…

打造个性化github主页 一

文章目录 概述创建仓库静态美化GitHub 统计信息卡仓库 GitHub 额外图钉仓库 热门语言卡仓库 GitHub 资料奖杯仓库 GitHub 活动统计图仓库 打字特效添加中文网站统计仓库 总结 概述 github作为全球最大的代码托管平台&#xff0c;作为程序员都多多少少&#xff0c;都使用过他。…