Linux:shell脚本:基础使用(6)《正则表达式-awk工具》

简介

awk是行处理器: 相比较屏幕处理的优点,在处理庞大文件时不会出现内存溢出或是处理缓慢的问题,通常用来格式化文本信息

awk处理过程: 依次对每一行进行处理,然后输出

1)awk命令会逐行读取文件的内容进行处理
2)awk以’:’为分隔符,将第1行数据格式化为7段,每段数据存入$1--$7变量中。$0存储这1行数据 
3)一行处理完成继续处理下一行,直到此文件读取结束

 awk常见用法
awk 选项  '模式或条件 { 编辑指令 }' 文件1 文件2 …  
awk  -f  脚本文件 文件1 文件2 …

特殊的内建变量

$0           表示整个当前行
$1           每行第一个字段
NF          字段数量变量
NR          每行的记录号,多文件记录递增
FNR        与NR类似,不过多文件记录不递增,每个文件都从1开始
\t            制表符
\n           换行符
FS          BEGIN时定义分隔符
RS       输入的记录分隔符, 默认为换行符(即文本是按一行一行输入)
~            匹配,与==相比不是精确比较
!~           不匹配,不精确比较
==         等于,必须全部相等,精确比较
!=           不等于,精确比较
&&      逻辑与
||             逻辑或
+            匹配时表示1个或1个以上
/[0-9][0-9]+/   两个或两个以上数字
/[0-9][0-9]*/    一个或一个以上数字
FILENAME 文件名
OFS      输出字段分隔符, 默认也是空格,可以改为制表符等
ORS        输出的记录分隔符,默认为换行符,即处理结果也是一行一行输出到屏幕
-F'[:#/]'   定义三个分隔符


 用法示例:输出

awk '{print}' test.txt 

简单的输入全部 

第1,3字段

 awk '{print $1,$3}' test.txt 

输出奇数行%2求模运算,余数为1是奇数,0为偶数 
  awk '(NR%2)==1{print}' test.txt 

  输出偶数行
  awk '(NR%2)==0{print}' test.txt 

输出以root开头的行
 awk '/^root/{print}' /etc/passwd

 输出以……结尾的行
  awk '/nologin$/{print}' /etc/passwd

统计以/bin/bash结尾的行=== grep -c "/bin/bash$"
awk 'BEGIN {x=0} ; /\/bin\/bash$/{x++};END {print x}' /etc/passwd

统计以空行分割的文本段落数
awk 'BEGIN{RS=""};END{print NR}' /etc/sysctl.conf 


按字段输出文本  

输出每行中以空格或制表位分割的第3个字段
awk '{print $3}' test.txt  

 

 密码为空的行 

awk -F ":" '$2==""{print}' /etc/shadow

密码为空的行 

awk 'BEGIN {FS==":"}; $2==""{print}' /etc/shadow

 输出以‘:’分割,第7字段包含/bash,的行的第1个字段
awk -F: '$7~"/bash"{print $1}' /etc/passwd

输出第1个字段包含nfs;并且包含8个字段的行的第1,2字段
awk '($1~"nfs")&&(NF==8){print $1,$2}' /etc/services  

输出第7个字段不是/bin/bsh也不是/sbin/nologin的行
awk -F: '($7!="/bin/bsh")&&($7!="/sbin/nologin"){print}' /etc/passwd 


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

调用wc -l 命令统计使用bash的用户个数
awk -F: '/bash$/{print | "wc -l"}' /etc/passwd

===等同于下列命令
grep -c "bash$" /etc/passwd

调用w命令,统计在线用户数
awk 'BEGIN {while ("w" |getline) n++; {print n-2}}'

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

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

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

相关文章

Linux监控基础命令

Linux资源监控 一.资源监控常用命令汇总 内存:top、free、vmstat、pmap I/O:vmstat、sar CPU:top、vmstat、mpstat、iostat 二.监控命令 日常检测使用top和free就足够了,如果要对系统进行日常监控可以使用zabbix或者prometh…

Nat. Photonics:实时捕获了光子的量子纠缠!

渥太华大学的研究人员与罗马大学的Danilo Zia和Fabio Sciarrino合作,展示了一种新技术,可以实时可视化两个纠缠光子(构成光的基本粒子)的波函数。 研究成果以“Interferometric imaging of amplitude and phase of spatial biphot…

qt显示图片并转换成灰度图及伪彩图

写了个程序,可在途图片,并切换成灰度图及伪彩图显示,主要代码如下: #include "mainwindow.h" #include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainW…

重注微电子产业,“三大齿轮”能否带起香港经济的“第三轮”

文 | 智能相对论 作者 | 佘凯文 众所周知,微电子产业早已成为现代科技领域的关键钥匙,谁能掌握微电子产业,谁就能拥有全球科技领域的话语权。 从上世纪开始,微电子产业曾经历过几次重大转移,如70年代从美国转向日本…

流媒体服务器SRS的搭建及QT下RTMP推流客户端的编写

一、前言 目前市面上有很多开源的流媒体服务器解决方案,常见的有SRS、EasyDarwin、ZLMediaKit和Monibuca。这几种的对比如下: (本图来源:https://www.ngui.cc/zz/1781086.html?actiononClick) 二、SRS的介绍 SRS&am…

LeetCode42.接雨水

这道题呢可以按列来累加,就是先算第1列的水的高度然后再加上第2列水的高度……一直加到最后就是能加的水的高度,我想到了这里然后就想第i列的水其实就是第i-1列和i1列中最小的高度减去第i列的高度,但是其实并不是,比如示例中的第5…

servlet介绍,tomcat容器下载启动

1.1servlet是什么&#xff1f; servlet是一种java程序类&#xff0c;这些类继承了httpservlet类。这些类没有main方法&#xff0c;有两大对象request请求&#xff0c; response响应对象。这些类需要servlet容器才可以运行。 servlet 2.5 servlet 3.0 WEB-INF/web.xml <…

【Rust】Rust学习 第十九章高级特征

现在我们已经学习了 Rust 编程语言中最常用的部分。在第二十章开始另一个新项目之前&#xff0c;让我们聊聊一些总有一天你会遇上的部分内容。你可以将本章作为不经意间遇到未知的内容时的参考。本章将要学习的功能在一些非常特定的场景下很有用处。虽然很少会碰到它们&#xf…

Android 12 源码分析 —— 应用层 一(SystemUI准备篇)

Android 12 源码分析 —— 应用层一&#xff08;SystemUI准备篇&#xff09; 在接下来的时间中&#xff0c;将会使用Pixel 3(blueline)作为研究对象&#xff0c;选用AOSP的android-12.0.0_r34分支作源代码。 先从android的应用层进行探析&#xff0c;然后慢慢深入android的fr…

【算法日志】贪心算法刷题:单调递增数列,贪心算法总结(day32)

代码随想录刷题60Day 目录 前言 单调递增数列 贪心算法总结 前言 今天是贪心算法刷题的最后一天&#xff0c;今天本来是打算刷两道题&#xff0c;其中的一道hard题做了好久都没有做出来(主要思路错了)。然后再总结一下。 单调递增数列 int monotoneIncreasingDigits(int n…

遥感影像的缨帽(K-T)变换Python实现

&#xff08;1&#xff09;介绍 缨帽变换&#xff08;Kirchhoff Transform&#xff0c;K-T变换&#xff09; 是一种在遥感图像处理中常用的技术&#xff0c;它可以有效地提取地物的空间特征和频谱信息。本文将对遥感缨帽变换的提出者、原理方法、公式、现在的发展、作用进行详…

CrystalNet .Net VCL for Delphi Crack

CrystalNet .Net VCL for Delphi Crack VCL或更为人所知的可视化组件库是基于一个面向对象的框架&#xff0c;什么是用户对开发人员和事件的Microsoft Windows应用程序的接口。可视化组件库是用对象Pascal编写的。它主要是为使用Borland而开发的&#xff0c;它具有与Delphi以及…