正则表达式 —— Awk

Awk


awk:文本三剑客之一,是功能最强大的文本工具

awk也是按行来进行操作,对行操作完之后,可以根据指定命令来对行取列

awk的分隔符,默认分隔符是空格或tab键,多个空格会压缩成一个

awk的用法

awk的格式:awk  选项  '模式或条件{操作}'  文件      在awk中操作默认就是打印

模式或条件:这么干    操作:操作结果    文件:操作的对象

例:打印第一列

awk  '{print  $1}'  test.txt

$0打印全部内容

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

常用选项:

-F:指定分隔符,如果是空格,不需要加

-v:变量赋值(用的少)

awk常用的内置变量:

$0:打印所有的内容

$n(n为数字):处理行的第n列

NR:处理行的行号

NF:处理当前行的字段个数                    $NF:表示最后一个字段

FS:列分隔符,指定文本的分隔符,和F作用一致  格式  FS=":"

不常用的:OFS输出文本的分隔符

RS:行分隔符,指定分隔符为回车

除了内置变量$n,其他的内置变量不用加$,不能用引号,也不能用括号,否则会被当成字符串处理

awk的打印功能:

awk  '{print}'  test.txt      打印所有,默认就是1

awk  '0{print}'  什么都不打印       

awk  '{print  NR}'  test.txt  只打印行号

awk  '{print  NR,$0}'   test.txt   既显示行号也显示内容

指定打印第三行   awk  'NR==3{print}'  test.txt

打印第二行到第四行  awk  'NR==2,NR==4{print}'   test.txt

奇偶打印:awk  'NR%2==0{print}'  test.txt   打印偶数行

awk  'NR%2==1{print}'   test.txt   打印奇数行

awk的运算功能:awk  'BEGIN{print  10+20}'   

也支持小数运算                                   3**2或3^2  求幂即次方

面试题:awk的内置函数:getline

1、如果getline左右没有重定向符号(>,<) 或者没有管道符是,awk会先读第一行,但是如果加了getline,会跳过第一行,去读第二行

例:awk  '{getline;print}'  test.txt  只打印第二行和第四行,跳过了第一行和第三行

相当于打印奇数行

2、如果两边有重定向或管道符,getline作用于定向输入文件

例:awk  '{getline  <  "test1.txt";print  >  "test2.txt"}'  test1.txt

先从test1获取test1的内容输入到test2,作用对象为test1

3、管道符

例:ls  |   awk  '{getline  ky30;print  $0,ky30;}'   

ky30为自定义变量

ls输出的结果传给ky30,打印ls命令的输出结果 

如果没有结果,打印空,不做如何操作

awk作为文本过滤进行打印

打印以root开头的    awk  '/^root/{print}'   test.txt

BEGIN模式更复杂的操作

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

在对文件进行操作之前,会先执行BEGIN{..}模式条件或命令操作

中间的{..}是真正的用于处理文件的命令

END{..}结束语句,一般都是打印执行结果

面试题:如何通过awk获取文件里有多少行

awk  'BEGIN{i=0};{i+1};END{print  i}'  test.txt  

意思为test.txt有多少行就打印多少次

了解即可:-v   变量赋值,指的是改变分隔符

例:把分隔符:换成@

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

awk的条件判断打印:

awk  -F:'$3>10{print}'  /etc/passwd  |  head  -n  15   把passwd第三列大于10的全打印出来

取反    awk  -F: '($4<10){print}'    /etc/passwd  |  head  -n  15 把第四列除了大于10的都打印出来

awk支持条件判断语句

awk  -F:'{if  ($3=10)  {print}}'  /etc/passwd        打印第三列等于10的内容

三元表达式:类似于JAVA   面试会问

格式:awk  '(条件表达式)?(A表达式或值):(B表达式或值)'

?相当于if       :相当于else

例:awk  -F:'{i=($3>$4)?$3:$4;{print;}'  /etc/passwd

如果满足第三列大于第四列就打印第三列,不满足就打印第四列

awk的精确筛选:>,<,=   比较数值

比较字符串:

$n~ "字符串":表示第n个字段包含某个字符串

$n!~ "字符串":表示不包含某个字符

$n== "字符串":表示第n个字符串就是某个字符

$n!= "字符串":表示不是某个字符串的选出来

$NF:表示最后一个字段

例:awk  -F:'$7~"bash" {print $1,$NF}'  /etc/passwd

打印第七个字段包含bash的第一例和最后一列

awk  -F:'$7~"nologin"  {print  $1,$3}'  /etc/passwd

第七个字段不是nologin,打印第一和第三个字段

awk  -F:'($6=="home/dn")&&($7=="/bin/bash"){print  $1,$NF}'

指定第六个字段为/home/dn  而且第七个字段是/bin/bash

&&相当于而且

awk  -F:'($3!=0)||($4>10) {print   $1}'  /etc/passwd

所有第三列不是0或者第四列大于10的结果,打印第一列

awk结合数组来进行使用

在awk中怎么来定义数组

awk  'BEGIN{a[0]=10;a[1]=20;a[2]=30;for(i  in  a)print  i , a[i]}'  

取的是a的索引        i  in的是a的索引    0,1,2是a的索引

去重统计

awk  '{a[$1]++};END{for(i  in  a)}{print  i,a[i]}'  test.txt


提取host.txt主机名后再放回host.txt文件

awk  -F  '[  .]+'   '{print  $2}'  ms.txt

正则表达式是一种用于匹配文本模式的工具,而Awk是一种用于处理文本和数据的编程语言。Awk通常与正则表达式一起使用,以在文本数据中查找、处理和转换特定模式。

在Awk中,正则表达式被用于以下方面:

  1. 模式匹配: Awk使用正则表达式来识别文本中的模式。这可以用于从文本中提取特定格式的数据,或者对满足特定条件的行执行操作。

  2. 条件处理: Awk允许您基于正则表达式匹配来执行不同的操作。您可以根据文本中的某些模式或特征来决定是否应用某些处理逻辑。

  3. 字段处理: Awk将输入文本划分为字段,并且您可以使用正则表达式来匹配和操作特定字段。这在处理结构化的数据文件(如CSV文件)时特别有用。

  4. 替换和转换: 您可以使用正则表达式在文本中查找并替换特定的模式。这允许您进行数据转换和清理。

以下是一个简单的Awk示例,展示如何使用正则表达式来处理文本数据:

假设有一个名为data.txt的文本文件,内容如下:

您可以使用以下Awk命令来提取年龄大于等于 28 的人员姓名:

在这个命令中,-F:指定了字段分隔符为冒号,$2 >= 28 是一个条件,表示第二个字段(年龄)大于等于28,{ print $1 } 是一个动作,表示打印第一个字段(姓名)。这个例子展示了如何使用Awk和正则表达式来处理文本数据中的特定模式。 

 

 

 

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

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

相关文章

【经典排序】—— “希尔排序”

插入排序希尔排序插入排序VS希尔排序 测试 希尔排序是在插入排序的基础上进行改进优化&#xff0c;所以学习希尔排序之前需要先了解插入排序。 插入排序 像玩扑克牌摸牌时一样&#xff0c;一张一张摸&#xff0c;每摸到一张插入到对应的位置&#xff0c;插入排序就是从第一个位…

大模型技术实践(一)|ChatGLM2-6B基于UCloud UK8S的创新应用

近半年来&#xff0c;通过对多款主流大语言模型进行了调研&#xff0c;我们针对其训练方法和模型特点进行逐一分析&#xff0c;方便大家更加深入了解和使用大模型。本文将重点分享ChatGLM2-6B基于UCloud云平台的UK8S实践应用。 01各模型结构及特点 自从2017年6月谷歌推出Transf…

NFTScan NFT API 在 DID Protocol 开发中的应用

自互联网发展以来&#xff0c;Web2.0 时代产生了网络社会&#xff0c;社会已经不再局限于地理边界&#xff0c;而 Web 3.0 引入了去中心化的理念&#xff0c;强调个体数据隐私和可信互操作性。在这个新的时代中&#xff0c;去中心化身份&#xff08;Decentralized Identifier 即…

vue3+vite配置vantUI主题

❓在项目中统一配置UI主题色&#xff0c;各个组件配色统一修改 vantUI按需安装 参考vantUI文档 创建vantVar.less文件夹进行样式编写 vantVar.less :root:root{//导航--van-nav-bar-height: 44px;//按钮--van-button-primary-color: #ffffff;--van-button-primary-backgr…

【Rust】Rust学习 第十一章编写自动化测试

Rust 是一个相当注重正确性的编程语言&#xff0c;不过正确性是一个难以证明的复杂主题。Rust 的类型系统在此问题上下了很大的功夫&#xff0c;不过它不可能捕获所有种类的错误。为此&#xff0c;Rust 也在语言本身包含了编写软件测试的支持。 编写一个叫做 add_two 的将传递…

FFmpeg 硬编码VideoToolBox流程

介绍 FFmpeg已经提供对 VideoToolBox 的编解码支持&#xff1b;主要涉及到的文件有videotoolbox.c、videotoolbox.h、videotoolboxenc.c、ffmepg_videotoolbox.c。在编译 FFmpeg 源码时&#xff0c;想要支持VideoToolBox&#xff0c;在 configure 时&#xff0c;需要–enable-…

激活函数总结(十一):激活函数补充(Absolute、Bipolar、Bipolar Sigmoid)

激活函数总结&#xff08;十一&#xff09;&#xff1a;激活函数补充 1 引言2 激活函数2.1 Absolute激活函数2.2 Bipolar激活函数2.3 Bipolar Sigmoid激活函数 3. 总结 1 引言 在前面的文章中已经介绍了介绍了一系列激活函数 (Sigmoid、Tanh、ReLU、Leaky ReLU、PReLU、Swish、…

第十三章 SpringBoot项目(总)

1.创建SpringBoot项目 1.1.设置编码 1.4.导入已有的spring boot项目 2.快速搭建Restfull风格的项目 2.1.返回字符串 RestController public class IndexController {RequestMapping("/demo1")public Object demo1() {System.out.println("demo1 ran...."…

2022年12月 C/C++(二级)真题解析#中国电子学会#全国青少年软件编程等级考试

第1题:数组逆序重放 将一个数组中的值按逆序重新存放。例如,原来的顺序为8,6,5,4,1。要求改为1,4,5,6,8。 输入 输入为两行:第一行数组中元素的个数n(1 输出 输出为一行:输出逆序后数组的整数,每两个整数之间用空格分隔。 样例输入 5 8 6 5 4 1 样例输出 1 4 5 6 8 以下是…

网络安全--linux下Nginx安装以及docker验证标签漏洞

目录 一、Nginx安装 二、docker验证标签漏洞 一、Nginx安装 1.首先创建Nginx的目录并进入&#xff1a; mkdir /soft && mkdir /soft/nginx/cd /soft/nginx/ 2.下载Nginx的安装包&#xff0c;可以通过FTP工具上传离线环境包&#xff0c;也可通过wget命令在线获取安装包…

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

sed是一种流编辑器&#xff0c;它是文本处理中非常中的工具&#xff0c;能够完美的配合正则表达式使用&#xff0c;功能不同凡响。 处理时&#xff0c;把当前处理的行存储在临时缓冲区中&#xff0c;称为“模式空间”&#xff08;pattern space&#xff09;&#xff0c;接着用s…

深入篇【C++】手搓模拟实现二叉搜索树(递归/非递归版本)常见应用场景(K模型与KV模型)

深入篇【C】手搓模拟实现二叉搜索树(递归/非递归版本&#xff09;&&常见应用场景 Ⅰ.二叉搜索树概念Ⅱ.二叉搜索树模拟实现(递归与非递归)①.定义结点②.构造二叉树③.插入结点④.删除结点(重要)⑤.查找结点⑥.析构二叉树⑦.拷贝二叉树⑧.二叉树赋值 Ⅲ.二叉搜索树应用…

SpringBoot复习:(48)RedisAutoConfiguration自动配置类

RedisAutoConfiguration类代码如下&#xff1a; 可以看到在这个类中配置了2个bean: redisTemplate和stringRedisTemplate. 而它通过EnableConfigurationProperties(RedisProperties.class)注解&#xff0c;把配置文件中配置的Redis相关的信息引入进来了&#xff0c;RedisPrope…

元素在div中水平居中

先看一下行级元素在div中水平居中&#xff1b; <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>div demo </title> <style> body {background-color:#d0e4fe; }</style> </head><body>&…

使用css实现时间线布局(TimeLine)

前言 在使用uni-app开发微信小程序过程中&#xff0c;遇到了时间轴布局&#xff0c;由于每项的内容高度不一致&#xff0c;使用uniapp自带的扩展组件uni-steps&#xff0c;样式布局无法对齐竖线&#xff0c;于是自己造轮子&#xff0c;完成特殊的布局。显示效果如下&#xff1…

71 # 协商缓存的配置:通过内容

对比&#xff08;协商&#xff09;缓存 比较一下再去决定是用缓存还是重新获取数据&#xff0c;这样会减少网络请求&#xff0c;提高性能。 对比缓存的工作原理 客户端第一次请求服务器的时候&#xff0c;服务器会把数据进行缓存&#xff0c;同时会生成一个缓存标识符&#…

day12 13-牛客67道剑指offer-JZ83、70、63、47、48、46、21、81

1. JZ83 剪绳子&#xff08;进阶版&#xff09; class Solution { public:int jumpFloorII(int number) {if(number < 1) return number;int temp 1;int res 0;/*2级台阶 23级台阶 44级台阶 65级台阶 16*/for(int i2; i<number; i){res 2 * temp;temp res;}return re…

docker 安装elasticsearch、kibana

下载es镜像 docker pull elasticsearch 启动es容器 docker run --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.typesingle-node" -e ES_JAVA_OPTS"-Xms512m -Xmx512m" -d elasticsearch 验证es界面访问 ​​​​​http://节点ip:9200/ ​…

应用在汽车前照灯系统中的环境光传感芯片

为了保证行车照明的安全性和方便性&#xff0c;减轻驾驶员的劳动强度。近年来&#xff0c;出现了许多新的照明控制系统&#xff0c;例如用于日间驾驶的自动照明系统、光束调节系统、延迟控制等。尤其是汽车自适应前照灯系统&#xff0c;它是一种能够自动改变两种以上的光型以适…

零售行业供应链管理核心KPI指标(一) – 能力、速度、效率和成本

有关零售行业供应链管理KPI指标的综合性分享&#xff0c;涉及到供应链能力、速度、效率和成本总共九大指标&#xff0c;是一个大框架&#xff0c;比较核心也比较综合。 衡量消费品零售企业供应链管理效率和水平的核心KPI通常有哪些&#xff1f; 图片来源-派可数据&#xff08;…