awk编辑器

目录

工作原理

命令格式

普通格式

BEGIN格式

语句循环格式

awk常见的内建变量(可直接用)

按行打印行内容

统计行数量

按字段输出文本

通过管道、双引号调用 Shell 命令


awk编辑器是一种流编辑器

工作原理

  • 逐行读取文本,默认以空格或tab键为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令。
  • awk信息的读入也是逐行读取的,执行结果可以通过print的功能将字段数据打印显示。
  • 在使用awk命令的过程 中,可以使用逻辑操作符“&&“表示“与”、“||“表示“或”、“!“表示“非”;还可以进行简单的数学运算,如+、-、*、/、%、^分别表示加、减、乘、除、取余和乘方。

命令格式

普通格式

awk 选项 '模式或条件 {操作}' 文件 1 文件 2 …      #对文件1,文件2进行操作
awk -f 脚本文件 文件 1 文件 2 …                           #用脚本对对文件1,文件2进行操作

BEGIN格式

awk 'BEGIN {...}; 条件{...}; END {...}'  文件     

  •   BEGIN {...}   表示处理文件前要执行的操作
  •   条件{...}     表示对匹配满足指定条件的文件行内容要执行的操作
  •   END {...}     表示处理完文件所有行内容后要执行的操作

语句循环格式

awk '{控制语句条件 {操作}}' 文件

awk 'if(条件表达式) {操作}' 文件                              #行内容满足if的条件则执行操作  

awk '变量=条件表达式?值1:值2; {操作}' 文件      

 #行内容是否条件表达式,如果条件成立则变量取值1,条件不成立则变量取值2

awk 'BEGIN{执行循环前的操作; while("命令" | getline) 每次循环的操作; 执行循环完后的操作}'                                                                           #使用while循环对每行内容执行操作
 

awk常见的内建变量(可直接用)

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

按行打印行内容

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

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

awk 'NR=1,NR=3{print $0}' 文件                    #答应文件里第一行到第三行的内容

awk 'NR>=80{print $0}' 文件                          #打印文件里80行以后的内容

awk '(NR>=70)&&(NR<=80){print $0}' 文件   #打印文件70行到80行的内容

awk '(NR>=70)||(NR<=80){print $0}' 文件      #打印文件70行和80行的内容

awk '(NR<=3)||(NR>=80){print $0}' 文件        #打印文件前3行和后80行的内容

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

awk '{print $0;getline}' 文件                            #打印文件奇数行   getline为跳到下一行

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

awk '{getline;print $0}' 文件                            #打印偶数行           getline为跳到下一行   

awk '/root/{print $0}' 文件                               #打印包含root的行内容

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

统计行数量

awk 'BEGIN {X=0}; /bash$/ {x++};END {print x}' 文件      #统计以bash结尾的行数

awk 'BEGIN {n=0;while("who" | getline)n++; print $n}'   #统计who命令的有多少行

按字段输出文本

默认以空格或tab键为分隔符进行分隔

awk -F ":" '{print $3}' 文件                   #输出每行中(以:分隔)的第3个字段
awk -F ":" '{print $1,$3}' 文件              #输出每行中(以:分隔)的第1、3个字段

awk -F ":" '$3<5{print $1,$3}' 文件     

#输出每行(以:分隔)第3个字段的值小于5的第1、3  个字段内容

awk -F ":" '!($3<200){print $0}' 文件               #输出每行第3个字段的值不小于200的行
awk -F ":" '/bash$/ {print $1":"$3}' 文件       

#输出每行以bash结尾的,并且以:分隔的第 一个字段和第三个字段,最后以:分隔输出内容

awk -F ":" '$3<5{print $1,$3,$NF}' 文件     

#输出每行(以:分隔)第3个字段的值小于5的第1、3个字段和最后一个字段内容 

awk -F ":" '$3<5{print NR,$0}' 文件                        #打印行号,同行输出 

awk -F ":" '$3<5{print NR} $3<5{print $0}' 文件    #打印行号,不同行输出 

awk -F ":" '$3~“bash”{print $0}' 文件             

 #输出每行中(以:分隔)的第3个字段包含bash的行内容           ~ 表示包含的意思

通过管道、双引号调用 Shell 命令

echo $PATH | awk 'BEGIN{RS=":"};END{print NR}'     

#统计以冒号分隔的文本段落数,END{}语句块中,往往会放入打印结果等语句

awk -F: '/bash$/{print | "wc -l"}' /etc/passwd        

#调用 wc -l 命令统计使用 bash 的用户个数,等同于 grep -c "bash$" /etc/passwd

free -m | awk '/Mem:/ {print int($3/($3+$4)*100)"%"}'    #查看当前内存使用百分比

top -b -n 1 | grep Cpu | awk -F ',' '{print $4}' | awk '{print $1}' 

 #查看当前CPU空闲率,(-b -n 1 表示只需要1次的输出结果)

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

 #显示上次系统重启时间

awk 'BEGIN {n=0 ; while ("w" | getline) n++ ; {print n-2}}' 

#调用w命令,并用来统计在线用户数

awk 'BEGIN {"hostname" | getline ; {print $0}}'    #调用 hostname,并输出当前的主机名

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

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

相关文章

二叉树,先序遍历、中序遍历、后序遍历和层序遍历实现 C++

二叉树基类声明 template<typename T>class Tree{protected:Tree() default;virtual ~Tree() default;virtual const Tree& root()const 0;virtual Tree& root() 0;virtual const Tree& left()const 0;virtual const Tree& right()const 0;virtua…

java第十八课 —— 重载、可变参数

方法重载 基本介绍 java 中允许同一个类中&#xff0c;多个同名方法的存在&#xff0c;但要求形参列表不一致&#xff01; 比如&#xff1a;System.out.println(); out 是 PrintStream 类型 重载的好处 减轻了起名的麻烦减轻了记名的麻烦 注意事项和使用细节 方法名&…

【Vue】Vue2中的Vuex

目录 Vuex介绍Vuex 中的核心概念 在vue2中使用Vuex安装 Vuex创建一个 Vuex Store在 Vue 实例中使用 Vuex编写 Vuex 的 state、mutations 和 actions在组件中使用 Vuex Vuex的核心State组件中获取 Vuex 的状态mapState 辅助函数对象展开运算符 Getter基本使用示例 通过属性访问通…

从多站点到多活,XEOS 对象数据容灾能力再提升

近日&#xff0c; XSKY SDS V6.4 新版本发布&#xff0c;其中 XEOS V6.4 全新升级并完善了统一命名空间功能&#xff0c;更进一步增强和完善了异地容灾方案&#xff0c;配合强一致代理读&#xff0c;可以实现异地多活&#xff1b;同时大幅降低管理复杂度&#xff0c;有效降低容…

Nginx中的limit_req模块和limit_conn模块详解

引言 在高流量场景下&#xff0c;良好的限流和连接控制策略至关重要&#xff0c;以防止服务器过载&#xff0c;确保服务稳定性和高可用性。Nginx 提供了 limit_req 和 limit_conn 模块&#xff0c;用以实现请求频率和并发连接数的限制。本文将详细介绍这两个模块的生效阶段和生…

TikTok电商带货特训营,跟随时代潮流,跨境掘金(8节课)

课程内容&#xff1a; 1-先导课 2-一、店铺运营认知与思路 3-二、店铺风控注意事项 4-三、美区Tiktok前期工作-1店铺入驻模式 5-三、美区Tiktok前期工作-2指纹浏览器介绍 6-三、美区Tiktok前期工作-4绑定电话号码 7-三、美区Tiktok前期工作-5添加仓库地址 8-三、美区Ti…

GIS读研与求职准备:植被定量遥感专业研0

本文介绍植被定量遥感专业研究生入学初期&#xff0c;为将来从事开发类工作所作求职准备的规划路径、方向选择等方面的建议。 前面提到了&#xff0c;最近有很多师弟师妹询问关于研究生方向选择、求职准备等方面的问题。因为很多朋友的提问比较有共性&#xff0c;所以会在征得对…

【秒杀系统】从零开始打造简易秒杀系统(一):防止超卖

【秒杀系统】从零开始打造简易秒杀系统&#xff08;一&#xff09;&#xff1a;防止超卖 前言 大家好&#xff0c;好久不发文章了。&#xff08;快一个月了- -&#xff09;最近有很多学习的新知识想和大家分享&#xff0c;但无奈最近项目蛮忙的&#xff0c;很多文章写了一半搁…

redis笔记1

1-nosql&#xff08;非关系型数据库&#xff09; 定位缓存&#xff0c;提高数据读写速度&#xff0c;减轻对数据储存与访问压力&#xff0c;不建议存敏感数据&#xff08;重要数据&#xff09;。 2-特征 &#xff08;1&#xff09;键值&#xff08;key-value&#xff09;型 &a…

【面试】Oracle JDK和Open JDK什么关系?

目录 1. 起源与发展2. 代码与许可3. 功能与组件4. 使用场景5. 版本更新与支持 1. 起源与发展 1.Oracle JDK是由Oracle公司基于Open JDK源代码开发的商业版本。2.Open JDK是java语言的一个开源实现。 2. 代码与许可 1.Oracle JDK包含了闭源组件&#xff0c;并根据二进制代码许…

深入Java:JSON解析与操作的艺术

哈喽&#xff0c;大家好&#xff0c;我是木头左&#xff01; 一、初识JSON&#xff1a;数据格式的优雅舞者 在现代Web开发中&#xff0c;JSON&#xff08;JavaScript Object Notation&#xff09;以其轻量级和易于阅读的特点成为了数据交换的首选格式。它基于JavaScript的一个…

用最通俗的话理解什么是协程

参考&#xff1a; 用最通俗的话理解什么是协程-CSDN博客

FreeRTOS_信号量_学习笔记

信号量的特性 消息队列用于传输多个数据&#xff0c;但是有时候我们只需要传递状态&#xff0c;这个状态值需要用一个数值表示。套用队列笔记中的流水线例子&#xff0c;可以理解为流水线上工件的数量。 信号&#xff1a;起通知作用 量&#xff1a;还可以用来表示资源的数量 当…

打印机手动双面打印技巧

一、WORD和PDF &#xff08;1&#xff09;首先选择要打印的页面范围&#xff0c;然后选择仅奇数页打印 &#xff08;2&#xff09;将打印完的纸张翻过来&#xff0c;白纸朝上&#xff0c;纸张的头部先放入打印机 &#xff08;3&#xff09;选择要打印的页面范围&#xff0c;然…

oracle.jdbc.OracleDatabaseException: ORA-00911: 无效字符

先吐槽一句&#xff0c;oracle 真坑啊&#xff01; 一个很正常的sql 语句一直报 ORA-00911: 无效字符 &#xff0c;拿到数据库去执行一点问题没有&#xff0c;一运行代码就报错&#xff0c;然后一个字符一个字符的对比&#xff0c;竟然是因为sql 结尾的一个 ";" 导致…

TP6开发文档概述

TP6&#xff08;ThinkPHP 6&#xff09;是一个使用PHP语言开发的快速、兼容且简单的面向对象开发框架。以下是一个简化的TP6开发文档概述&#xff0c;涵盖了核心功能和一些常用方法&#xff1a; 一、环境准备 PHP安装&#xff1a;确保已经安装了与TP6兼容的PHP版本。 Composer…

PHPIPAM在建立数据库阶段报错

如题&#xff0c;参考大佬的操作IP地址管理系统phpipam部署-CSDN博客搭建PHPIPAM&#xff0c;不过我没有选择1.4&#xff0c;而是直接搭建了1.6版本&#xff0c;一切顺利&#xff0c;到了最后建立数据库阶段&#xff0c;输入数据库账号和密码后提示Cannot install sql SCHEMA f…

大模型部署_书生浦语大模型 _作业2

本节课可以让同学们实践 4 个主要内容&#xff0c;分别是&#xff1a; 1、部署 InternLM2-Chat-1.8B 模型进行智能对话 1.1安装依赖库&#xff1a; pip install huggingface-hub0.17.3 pip install transformers4.34 pip install psutil5.9.8 pip install accelerate0.24.1…

Elasticsearch之文本分析

文本分析基本概念 官网&#xff1a;Text analysis | Elasticsearch Guide [7.17] | Elastic 官网称为文本分析&#xff0c;这是对文本进行一直分析处理的方式&#xff0c;基本处理逻辑是为按照预先制定的分词规则&#xff0c;把原本的文档进行分割成多个小颗粒度的词项&#x…

Python pands使用引擎实现excel条件格式

截至我的知识更新日期&#xff08;2023年&#xff09;&#xff0c;Pandas 库本身并不直接支持Excel条件格式。Pandas 是一个强大的Python数据分析库&#xff0c;它主要用于数据分析和操作&#xff0c;而不是用于创建或编辑Excel文件的格式。 然而&#xff0c;你可以使用 openp…