shell文本三剑客——awk命令【☆】

目录

一、akw原理

二、命令格式

三、常用变量

四、awk的用法

1.输出整行内容

2.按字段输出文本内容

3.按列输出文件内容 FS变量为列分隔符

4.awk的三个模式

5. awk ‘控制语句条件 {操作}’ 文件

6.awk的数组

7.awk的应用


一、akw原理

        逐行读取文本,默认以空格或tab键为分隔符分割,将行内容分隔成各个字段保存到内建变量中,并按模式或条件执行编辑命令。与sed命令不同的是,sed常用于整行的处理,awk倾向于将一行内容分成多个字段再处理。在使用awk命令的过程中,可以使用逻辑操作符“&&”表示“与”、“||”表示“或”、“!”表示“非”;还可以进行简单的数学运算,如+、-、*、/、%、^分别表示加、减、乘、除、取余和乘方。

二、命令格式

awk 选项 ‘模式或条件 {操作}’ 文件1 文件2...

awk -f 脚本文件 文件1 文件2...

三、常用变量

  • FS:列分割符。指定每行文本的字段分隔符,默认为空格或制表位。与"-F"作用相同
  • NF:当前处理的行的字段个数。
  • NR:当前处理的行的行号(序数)。
  • $0:当前处理的行的整行内容。
  • $n:当前处理行的第n个字段(第n列)。
  • FILENAME:被处理的文件名。
  • RS:行分隔符。awk从文件上读取资料时,将根据RS的定义把资料切割成许多条记录,而awk一次仅读入一条记录,以进行处理。预设值是'\n'

四、awk的用法

1.输出整行内容

awk '{print $0}' 文件名     #打印所有行内容

awk 'NR==1{print $0}' 文件名     #打印第1行内容

awk 'NR>=10{print $0}' 文件名    #查看文件第十行及后面所有行的内容

awk '/^字符串/{print $0}' 文件名    #查看文件以“字符串”开头的所有行内容

awk '/字符串$/{print $0}' 文件名    #查看文件以“字符串”结尾的所有行内容,如果存在/,需要用\转义。

awk '(NR==10)||(NR==30){print $0}' 文件名    #查看文件的第10行和第30行内容

查看区间1-3行内的内容方法一:awk 'NR==1,NR==3{print $0}' 文件名

查看区间2-7行内的内容方法二:awk '(NR<=7)&&(NR>=2){print $0}' 文件名

awk '(NR>=7)||(NR<=2){print $0}' 文件名   #查看文件前2行和7行之后的内容

awk '/\/bin\/bash$/{print $0}' 文件名       #查看文件以/bin/bash结尾的行内容

awk '(NR%2)==0 {print $0}' 文件名    #打印文件的偶数行内容

awk '(NR%2)==1 {print $0}' 文件名    #打印文件的奇数行内容

awk '{print FNR,$0}' 1.txt 2.txt     #同时打印多个文件使用FNR显示行号不会连续计数

awk 'BEGIN {x=0};/\/bin\/bash$/{x++};END {print x}' /etc/passwd     #统计文件中以XX结尾的行

2.按字段输出文本内容

awk -F '字段分隔符' 'NR==n {print $0}'          输出 第n行的 整行内容
awk -F '字段分隔符' 'NR==n {print $1}'          输出 第n行的 第一个字段的内容
awk -F '字段分隔符' 'NR==n {print $1,$NF}'  输出 第n行的 第一个字段和最后一个字段的内容
awk -F '字段分隔符' 'NR==n,NR==M {print $1}'     输出 第n行到第m行的 第一个字段的内容
awk -F '字段分隔符' 'NR>=n&&NR<=M {print $1}'   输出行号大于等于n小于等于m的行的第一个字段内容     
awk -F '字段分隔符' 'NR==n||NR==M {print $1}'   输出 第n行第m行的 第一个字段的内容
awk -F '字段分隔符' '/字符串/ {print $1}'        输出包含指定字符串的行的 第一个字段的内容
awk -F '字段分隔符' '/正则表达式/ {print $1}'  输出 匹配正则表达式的行的 第一个字段的内容
awk -F '字段分隔符' '$1>=n {print $0}'           输出第一个字段的数值大于等于n的 整行内容
                                    == != >= > <= <
awk -F '字段分隔符' '$1~"字符串" {print $0}'  输出第一个字段包含指定字符串的 整行内容
                                     ~(包含) !~(不包含) ==(等于) !=(不等于)

awk -F 指定分割符查看文件中以XX结尾的行内容的第x个字段

awk -F 指定分割符查看文件的多个字段

awk -F 指定分割符查看文件的第一个字段和最后一个字段(NF默认每行的字段数,每行字段不一致的话可以用$NF表示最后一个字段

用FS="分隔符" 查看指定字段(FS是列分割符的意思,先指定为":"再去执行,效果与awk -F相同)

awk -F: '$3<5 {print $0}' /etc/passwd    #查看文件第三个字段小于5的行内容

awk -F: '$3<5 {print $1,$NF}' /etc/passwd   #查看文件第三个字段小于5的行,只显示第1个和最后一个字段

awk -F: '!($3<1000) {print $1,$NF}' /etc/passwd      #查看文件第三个字段小于1000的行,显示第1和最后一个字段
awk -F: '!($3<1000) {print $0}' /etc/passwd      #查看文件第三个字段小于1000的行,显示整行内容

awk -F: '($3<5) {print NR; print $0}' /etc/passwd    #查看文件第三个字段小于5的行,显示行号和整行内容

 awk -F: '$7~"bash" {print NR,$0}' /etc/passwd      #查看第n个字段包含xx字符的行号和行内容

awk -F: 'NR==1||NR==2 {print $1}' /etc/passwd   #查看第一行和第二行的行的第一个字段

awk -F: 'NR>=3&&NR<=5 {print $0}' /etc/passwd   #查看行号大于等于三小于等于5的整行内容

awk 'BEGIN{OFS=":"};{$1=$1;print $0}' #指定输出内容的分隔符

3.按列输出文件内容 FS变量为列分隔符

awk ‘BEGIN{RS":"}; {print $0}’      指定列分割符为冒号输出整行内容

awk -F/ ‘BEGIN{RS":"}; {print $2}’   #指定列分割符为冒号,行分割符为斜杠,输出第二个字段的内容

4.awk的三个模式

awk三个模式里,多个大括号可以执行多个操作,也可以把对个操作用分号间隔合并到一个大括号里。

格式:awk ‘BEGIN {x=0}; 条件{...};END{...}’ 文件

  • begin表示处理文件前执行的操作;
  • 条件表示对匹配满足指定条件的文件行内容执行操作;
  • end表示处理完文件所有航内容后要执行的操作。

5. awk ‘控制语句条件 {操作}’ 文件

 awk '变量=条件表达式?值1:值2; {操作}' 文件    #行内容是否符合表达式,如果条件成立则变量取值1,条件不成立则变量取值2。【三元运算符 条件表达式?值1:值2】

awk '{if(语句条件) {操作}}’ 文件    #满足if的条件的行 则执行操作

awk 'BEGIN while("命令" | getline)每次循环的操作;{操作}' getline获取行内容并跳到下一行

6.awk的数组

awk 'BEGIN{a[0]=10;a[1]=20; print a[1]}'          --->输出结果为20

awk 'BEGIN{a[0]=10;a[1]=20; print a[0}}'          --->输出结果为10

awk 'BEGIN{a["abc"]=10;a["xyz"]=20;print a["abc"]}'        --->输出结果为10

awk 'BEGIN{a["abc"]=10;a["xyz"]=20;print a["xyz"]}'        --->输出结果为20

awk 'BEGIN{a["abc"]="aabbcc";a["xyz"]="xxyyzz";print a["xyz"]}'        --->输出结果为xxyyzz

awk 'BEGIN{a[0]=10;a[1]=20;a[2]=30;for(i in a){print i,a[i]}}'    i 遍历的是变量a的下标

注意:BEGIN中的命令只执行一次。awk数组的下标除了可以使用数字,也可以使用字符串,字符串需要使用双引号

7.awk的应用

 awk查看内存使用率

free | awk '/Mem:/{print int($3/$2*100)"%"}'

awk命令查看cpu使用率

 top -b -n1 | awk -F, '/^%Cpu/{print $4}' | awk '{print 100-$1"%"}'

awk查看磁盘使用率

df | grep -w "/" | awk '{print $5}' | awk -F% '{print 100-$1"%"}'

awk查看系统运行时长

date -d "$(awk -F. '{print $1}' /proc/uptime) second ago" +"%Y%m%d %H:%M:%S"

awk获取IP地址

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

awk查看系统平均负载

uptime | awk -F, '{print $3}' | awk '{print $3}'

awk获取网卡流量

ifconfig ens33 | awk -F '(' '/RX packets/{print $2}' | awk -F ')' '{print $1}'

 awk将ssh远程登录失败超过5次的IP导入到黑名单里

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

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

相关文章

TypeScript-泛型

泛型(Generics) 指在定义接口&#xff0c;函数等类型的时候&#xff0c;不预先指定具体的类型&#xff0c;而在使用的时候再指定类型的一种特性&#xff0c;使用泛型可以复用类型并且让类型更加灵活 泛型接口-interface 语法&#xff1a;在 interface 接口类型的名称后面使用…

《基于Jmeter的性能测试框架搭建》改进一

《基于Jmeter的性能测试框架搭建》文末笔者提到了不少待改进之处&#xff0c;如下所示。 Grafana性能图表实时展现&#xff0c;测试过程中需实时截图形成测试报告&#xff0c;不够人性化。解决方案&#xff1a;自动生成测试报告并邮件通知。 Grafana性能图表需测试人员实时监控…

加入MongoDB AI创新者计划,携手MongoDB共同开创AI新纪元

加入MongoDB AI创新者计划&#xff01; MongoDB对AI创新和初创企业的支持既全面又广泛&#xff01;无论您是领先的AI初创企业还是刚刚起步&#xff0c;MongoDB Atlas都是支持您愿景的最佳平台。 AI 初创者计划The AI Startup Track AI初创者计划为早期初创企业提供专属福利&…

云端漫步:搭建个人博客的移动云之旅

&#x1f482;作者简介&#xff1a; Thunder Wang&#xff0c;阿里云社区专家博主&#xff0c;华为云云享专家&#xff0c;腾讯云社区认证作者&#xff0c;CSDN SAP应用技术领域优质创作者。在学习工作中&#xff0c;我通常使用偏后端的开发语言ABAP&#xff0c;SQL进行任务的完…

dmanywhere的docker制作

dmanywhere的docker制作 官网地址&#xff1a; http://www.dmanywhere.cn/ 下载相关执行文件。 Dockerfile的默认命名是“Dockerfile”&#xff0c; 在构建镜像时&#xff0c;如果没有指定Dockerfile文件&#xff0c;Docker通常会寻找名为“Dockerfile”的文件 1.Dockerf…

6款网站登录页(附带源码)

6款网站登录页 效果图及部分源码123456 领取源码下期更新预报 效果图及部分源码 1 部分源码 <style>* {margin: 0;padding: 0;}html {height: 100%;}body {height: 100%;}.container {height: 100%;background-image: linear-gradient(to right, #fbc2eb, #a6c1ee);}.l…

搜索引擎的设计与实现(四)

目录 6 系统测试 6.1测试重要性 6.2测试用例 结 论 参 考 文 献 前面内容请移步 搜索引擎的设计与实现&#xff08;三&#xff09; 免费源代码&毕业设计论文 搜索引擎的设计与实现 6 系统测试 6.1测试重要性 该项目是在本地服务器上进行运行和调试&#xff0c;…

Spring6基础笔记

Spring6 Log4j2 1、概述 1.1、Spring是什么&#xff1f; Spring 是一款主流的 Java EE 轻量级开源框架 &#xff0c;Spring 由“Spring 之父”Rod Johnson 提出并创立&#xff0c;其目的是用于简化 Java 企业级应用的开发难度和开发周期。Spring的用途不仅限于服务器端的开发…

面试准备-八股【面试准备】

面试准备-八股【面试准备】 Java基础解决hash冲突的方法try catch finallyException与Error的包结构OOM你遇到过哪些情况&#xff0c;SOF你遇到过哪些情况线程有哪些基本状态?Java IO与 NIO的区别堆和栈的区别对象分配规则notify()和notifyAll()有什么区别&#xff1f;sleep()…

足球走地全自动化操作软件实现过程

本次采用selenium实现自动化操作的流程 打开浏览器录入账号密码等待数据请求&#xff08;监听&#xff09;有新数据&#xff0c;进行自动化操作通过homeName搜索&#xff0c;找到对应数据找到对应的类型&#xff08;让、大小…&#xff09;找到对应的盘口输入数量提交 附登录…

C#编程-.NET Framework使用工具类简化对象之间的属性复制和操作

在C#编程中&#xff0c;对象之间的属性复制和操作是一个常见的需求。为此&#xff0c;.NET Framework提供了多种实用工具库&#xff0c;如AutoMapper、ValueInjecter和ExpressMapper。这些库通过简化代码&#xff0c;提高了开发效率。本文将介绍这些工具库&#xff0c;比较它们…

《我的阿勒泰》观后感(一、什么叫做有用)

通过央视热播短剧《我的阿勒泰》&#xff0c;认识了李娟老师。同时也认识了她的作品&#xff0c;值得推荐。 生命并不荒凉&#xff0c;它是一种安静的绝美。 生活&#xff0c;如同一个巨大的迷宫&#xff0c;充满了未知和变数。有时&#xff0c;我们会在其中迷失方向&#xf…

线性规划库PuLP使用教程

Python求解线性规划——PuLP使用教程 简洁是智慧的灵魂&#xff0c;冗长是肤浅的藻饰。——莎士比亚《哈姆雷特》 文章目录 一、说明二、安装 PuLP 库三、线性规划简介3.1 线性规划3.1.1 高考题目描述3.1.2 基本概念 3.2 整数规划3.2.1 题目描述[3]3.2.2 解题思路 四、求解过程…

五分钟”手撕“图书管理系统

前言&#xff1a; 图书馆管理系统需要结合JavaSE的绝大部分知识&#xff0c;是一个很好的训练项目。 为了让大家更加方便的查阅与学习&#xff0c;我把代码放开头&#xff0c;供大家查询。 还有对代码的分析&#xff0c;我将以类为单位分开讲解。 目录 全部代码 Main类 Us…

智慧校园(安校易)管理系统 FileUpProductupdate.aspx 任意文件上传漏洞复现

0x01 产品简介 “安校易”是银达云创公司基于多年教育市场信息化建设经验沉淀,经过充分的客户需求调研,并依据国家“十三五”教育信息化建设规范而推出的综合互联网+教育信息化解决方案。“安校易”以物联网技术为基础,以学生在校“学食住行”管理为中心,将消费管理、门禁…

头歌01 -部分背包

蜜雪冰城店要举行一场调制饮品比赛。具体说明如下&#xff1a; 1&#xff09;参赛者拥有容量为800ml的杯子&#xff0c;可任选图2中的饮品进行混合&#xff1b;说明&#xff1a;图2中的饮品价格和体积已确定。 图2 2&#xff09;调制饮品价格为各所使用饮料的价格之和&#xff…

spring boot集成Knife4j

文章目录 一、Knife4j是什么&#xff1f;二、使用步骤1.引入依赖2.新增相关的配置类3.添加配置信息4.新建测试类5. 启动项目 三、其他版本集成时常见异常1. Failed to start bean ‘documentationPluginsBootstrapper2.访问地址后报404 一、Knife4j是什么&#xff1f; 前言&…

链游:区块链技术的游戏新纪元

随着区块链技术的快速发展&#xff0c;越来越多的行业开始探索与其结合的可能性&#xff0c;其中&#xff0c;游戏行业与区块链的结合尤为引人注目。链游&#xff0c;即基于区块链技术的游戏&#xff0c;正以其独特的优势&#xff0c;为玩家带来全新的游戏体验。本文将对链游进…

算法打卡 Day13(栈与队列)-滑动窗口最大值 + 前 K 个高频元素 + 总结

文章目录 Leetcode 239-滑动窗口最大值题目描述解题思路 Leetcode 347-前 K 个高频元素题目描述解题思路 栈与队列总结 Leetcode 239-滑动窗口最大值 题目描述 https://leetcode.cn/problems/sliding-window-maximum/description/ 解题思路 在本题中我们使用自定义的单调队列…

监控上网的软件有哪些?含泪推荐的电脑监控软件

监控上网的软件有很多&#xff0c;企业选择的时候应该遵循什么样的原则呢&#xff1f;鄙人愚见&#xff0c;认为以下四项原则是选择监控软件时首要考虑的。 1、功能需求&#xff1a; 监控软件不应该只是起到控制上网的作用&#xff0c;因为一些泄密行为可能是通过USB接口、打印…