awk笔记231129

awk的脚本套路是:
awk的脚步部分最好用一对单引号将
‘BEGIN{} /pattern1/{}…/patternN/{} END{}’ 套起来,
因为常用到$号, $号在单引号中不会被转义, 在双引号中有取值的含义

awk -F '自定义分隔符' `BEGIN{开始块}
/pattern1/{操作pattern1过滤的行的块}
/pattern2/{操作pattern2过滤的行的块}
...
/patternN/{操作patternN过滤的行的块}
END{结束块}

-F指定分隔符,可以没有,默认是空格
BEGIN{开始块}可以没有
END{结束块}可以没有
BEGIN,END 必须全大写,否则不起效

echo "1 aaa aaa aaa
2 aaa aaa aaa
3 aaa aaa aaa
4 aaa aaa aaa
5 aaa aaa aaa
6 aaa aaa aaa
7 aaa aaa aaa"  | awk   '/[135]/{sub("aaa","b&b",$0);  print $0}'

结果

1 baaab aaa aaa
3 baaab aaa aaa
5 baaab aaa aaa

与上面的区别只是 sub改为gsub

echo "1 aaa aaa aaa
2 aaa aaa aaa
3 aaa aaa aaa
4 aaa aaa aaa
5 aaa aaa aaa
6 aaa aaa aaa
7 aaa aaa aaa"  | awk   '/[135]/{gsub("aaa","b&b",$0);  print $0}'

结果:

1 baaab baaab baaab
3 baaab baaab baaab
5 baaab baaab baaab

原样实例

[z@fedora root]$ echo "1 aaa aaa aaa
2 aaa aaa aaa
3 aaa aaa aaa
4 aaa aaa aaa
5 aaa aaa aaa
6 aaa aaa aaa
7 aaa aaa aaa"  | awk   '/[135]/{sub("aaa","b&b",$0);  print $0}'
1 baaab aaa aaa
3 baaab aaa aaa
5 baaab aaa aaa
[z@fedora root]$ echo "1 aaa aaa aaa
2 aaa aaa aaa
3 aaa aaa aaa
4 aaa aaa aaa
5 aaa aaa aaa
6 aaa aaa aaa
7 aaa aaa aaa"  | awk   '/[135]/{gsub("aaa","b&b",$0);  print $0}'
1 baaab baaab baaab
3 baaab baaab baaab
5 baaab baaab baaab

讲解

# /[135]/ 筛选出含1,3,5的行
# sub和gub是替换函数, sub替换每行的第一个匹配, gsub替换每行的所有匹配
# b&b表示给匹配的结果左右加上b字母, &代表匹配的字段
awk   '/[135]/{sub("aaa","b&b",$0);  print $0}'
awk   '/[135]/{gsub("aaa","b&b",$0);  print $0}'



例2
echo "0 aaa aaa aaa
1 aaa aaa aaa
2 aaa aaa aaa
3 aaa aaa aaa
4 aaa aaa aaa
5 aaa aaa aaa
6 aaa aaa aaa
7 aaa aaa aaa
8 aaa aaa aaa
9 aaa aaa aaa"  | 
awk   'BEGIN{print "这是开始块"  } /[135]/{gsub("aaa","b&b",$0);  print $0} /[234]/{print $0} END{print "这是结束块" }'

上下是一样的,单双引号未结束时可换行, 管道符|后可换行

echo "0 aaa aaa aaa
1 aaa aaa aaa
2 aaa aaa aaa
3 aaa aaa aaa
4 aaa aaa aaa
5 aaa aaa aaa
6 aaa aaa aaa
7 aaa aaa aaa
8 aaa aaa aaa
9 aaa aaa aaa"  | 
awk   'BEGIN{print "这是开始块"        } 
/[135]/{gsub("aaa","b&b",$0);  print $0} 
/[234]/{print $0                       } 
END{print "这是结束块"                 }'

结果

这是开始块
1 baaab baaab baaab
2 aaa aaa aaa
3 baaab baaab baaab
3 baaab baaab baaab
4 aaa aaa aaa
5 baaab baaab baaab
这是结束块

控制台原样

[z@fedora root]$ echo "0 aaa aaa aaa
1 aaa aaa aaa
2 aaa aaa aaa
3 aaa aaa aaa
4 aaa aaa aaa
5 aaa aaa aaa
6 aaa aaa aaa
7 aaa aaa aaa
8 aaa aaa aaa
9 aaa aaa aaa"  |
awk   'BEGIN{print "这是开始块"        }
/[135]/{gsub("aaa","b&b",$0);  print $0}
/[234]/{print $0                       }
END{print "这是结束块"                 }'
这是开始块
1 baaab baaab baaab
2 aaa aaa aaa
3 baaab baaab baaab
3 baaab baaab baaab
4 aaa aaa aaa
5 baaab baaab baaab
这是结束块

可看出, 第三个块输入的数据会受第二个块的影响
第三块筛选包含2,3,4的行,第二块筛选包含1,3,5的行,
第3行是共选,所以出现两次,被第二块改了,第三块什么都不做,输出第二块的修改的样子
第2,4行没有被第二块筛选,保持原态,被第三块筛选输出.

例3
echo "0 aaa aaa aaa
1 aaa aaa aaa
2 aaa aaa aaa
3 aaa aaa aaa
4 aaa aaa aaa
5 aaa aaa aaa
6 aaa aaa aaa
7 aaa aaa aaa
8 aaa aaa aaa
9 aaa aaa aaa"  | 
awk   'BEGIN{print "这是开始块"               } 
/[135]/{gsub("aaa","b&b",$0);  print $0       } 
/[234]/{print $0                              } 
/[1579]/{sub("aaa","1579&1579",$0);  print $0 } 
END{print "这是结束块"                        }'

结果

这是开始块
1 baaab baaab baaab
1 b1579aaa1579b baaab baaab
2 aaa aaa aaa
3 baaab baaab baaab
3 baaab baaab baaab
4 aaa aaa aaa
5 baaab baaab baaab
5 b1579aaa1579b baaab baaab
7 1579aaa1579 aaa aaa
9 1579aaa1579 aaa aaa
这是结束块

控制台原样

[z@fedora root]$ echo "0 aaa aaa aaa
1 aaa aaa aaa
2 aaa aaa aaa
3 aaa aaa aaa
4 aaa aaa aaa
5 aaa aaa aaa
6 aaa aaa aaa
7 aaa aaa aaa
8 aaa aaa aaa
9 aaa aaa aaa"  |
awk   'BEGIN{print "这是开始块"               }
/[135]/{gsub("aaa","b&b",$0);  print $0       }
/[234]/{print $0                              }
/[1579]/{sub("aaa","1579&1579",$0);  print $0 }
END{print "这是结束块"                        }'
这是开始块
1 baaab baaab baaab
1 b1579aaa1579b baaab baaab
2 aaa aaa aaa
3 baaab baaab baaab
3 baaab baaab baaab
4 aaa aaa aaa
5 baaab baaab baaab
5 b1579aaa1579b baaab baaab
7 1579aaa1579 aaa aaa
9 1579aaa1579 aaa aaa
这是结束块




发现菜鸟教程的解释挺好的,和我理解的一样 点击跳转 AWK 工作原理

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

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

相关文章

国标GB28181协议/RTSP视频监控汇聚平台EasyCVR(V.3.4)页面UI大更新

为提高用户体验,增强平台功能,旭帆科技的Easy系列平台也在不断优化更新中。在最新的EasyCVR(V.3.4)中,其最显著的区别即为首页UI的调整。 其亮点是在【配置中心】-【基础配置】-【展示信息】中,首页UI可分…

只有stm32基础,学嵌入式linux得几年?

只有stm32基础,学嵌入式linux得几年? 你这几句话基本把好几个方向都说了个遍,但是实际你没有这么多精力 这里32的基础意义不大,主要是C语言基础和之前项目中的经验,要是这俩个都不错,你可以直接上手 linux&…

MySQL 插入数据报错 Incorrect string value

当在sys_dict_data表中执行插入语句; insert into sys_dict_data values(1, 1, 男, 0, sys_user_sex, , , Y, 0, admin, sysdate(), , null, 性别男);报错信息如下: insert into sys_dict_data values(1, 1, 男, …

yum方式安装Mariadb多主集群安装和配置-centos9stream-mariadb10.5.16(实战建议配置)

mariadb是mysql的另外一个选择了,具体就不再介绍,这里主要介绍主主集群的配置方式,大家要注意,尽管为主主集群,在数据写入时,尤其是在连接rabbitmq时,写入操作建议还是从指定单点写入&#xff0…

系统内存莫名升高,排查过程

1.跟进生产服务器内存无故增长的问题(目前已通知操作系统提供方进行排查),记录排查过程。 11月27日上午10点50分中心客户反馈,政通雄安app中的租赁入口进入之后显示空白,开始着手排查,一下是排查步骤&…

ABAP2XLSX 的安装和demo

ABAP2XLSX 是一个git上面的很好用的工具,它可以帮助abaper们更方便,更简单的生成各种各样复杂的自定义的excel,以满足各企业的信息化建设 在安装这个之前,请先查看之前的博客,去安装abapgit abap2xlsx地址&#xff1…

源 “MySQL 8.0 Community Server“ 的 GPG 密钥已安装,但是不适用于此软件包。请检查源的公钥 URL 是否配置正确。

源 “MySQL 8.0 Community Server“ 的 GPG 密钥已安装,但是不适用于此软件包。请检查源的公钥 URL 是否配置正确。yum install mysql-server --nogpgcheck

音频修复和增强软件iZotope RX 10 mac特点介绍

iZotope RX 10 mac是一款音频修复和增强软件,主要特点包括: 声音修复:iZotope RX 10可以去除不良噪音、杂音、吱吱声等,使音频变得更加清晰干净。 音频增强:iZotope RX 10支持对音频进行音量调节、均衡器、压缩器、限…

爬虫http代理有什么用处?怎么高效使用HTTP代理?

在进行网络爬虫工作时,我们有时会遇到一些限制,比如访问频率限制、IP被封等问题。这时,使用HTTP代理可以有效地解决这些问题,提高爬虫的工作效率。本文将介绍爬虫HTTP代理的用处以及如何高效地使用HTTP代理。 一、爬虫HTTP代理的用…

适用于 Windows 和 Mac 电脑的最佳数据恢复软件

当我们的电脑上的文件被错误删除时,总是很难恢复该文件,或者除非您进行了系统还原,否则一切都会恢复到删除恢复的文件或文件夹之前的状态。 拥有合适的 PC 软件始终可以帮助您改善 PC 用户的体验,而适用于 Windows 10 和 11 的良…

【滑动窗口】长度最小的数组

长度最小的数组 长度最小的数组 文章目录 长度最小的数组题目描述解法暴力解法滑动窗口Java示例代码c示例代码 题目描述 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl1, ..., numsr-1, num…

学习笔记:Pytorch 搭建自己的Faster-RCNN目标检测平台

B站学习视频 up主的csdn博客 1、什么是Faster R-CNN 2、pytorch-gpu环境配置(跳过) 3、Faster R-CNN整体结构介绍 Faster-RCNN可以采用多种的主干特征提取网络,常用的有VGG,Resnet,Xception等等。 Faster-RCNN对输入…

IPv6地址介绍

当前我国的网络正在快速向IPv6升级中,从网络基础设施如运营商骨干网、城域网,到互联网服务商如各类云服务,以及各类终端设备厂商如手机、电脑、路由器、交换机等。 一、网络IP地址 IP地址是英文Internet Protocol的缩写,是网络之…

Parasoft:正确的静态应用程序安全测试 (SAST) 解决方案

随着软件开发从Web应用扩展到工业物联网(IIoT)设备,静态应用安全测试(SAST)越来越有必要从根本上帮助确保软件的功能安全。根据 Forrester Research的研究,网络攻击是近两年安全漏洞的主要来源。因此&#…

conan入门(三十一):在命令行(shell)中从profile中读取配置参数

最近使用conan来执行本地或交叉编译时,我发现我需要知道当前profile定义的编译器的类型和版本以及平台,希望用profile中定义的os,arch,compier生成安装路径名如windows-msvc-x86_64,该怎么实现呢? conan profile show 基本的思路…

【AI】【工具】五个推荐的AI视频制作工具

【详细视频介绍】 https://www.bilibili.com/video/BV1aH4y11752/ 【DESCRIPT】 直接在线使用 用修改文档的方法来编辑视频。 导入视音频文件后Descript会生成相应的描述文档,通过修改此文档你就可以实时获得修改后的视频和音频。 自动加字幕当然也很方便。 还带…

行业研究:2023年建筑涂料市场需求及发展方向分析

目前绿色化经济成为社会经济主旋律,涂料行业作为高污染行业,国家层面出台了一系列政策规划引导行业向绿色、安全、环保发展。例如,禁止使用高VOCs含量的溶剂型涂料,推广水性涂料等低VOCs含量涂料,鼓励外商投资高性能涂…

14.docker部署应用的两种企业实践

1.介绍 1.1 说明 这里仅仅说明一下在企业应用的两种简单实践,并不包含自动化这套东西。这里说的两种实践,是我在工作中不同公司使用的两种部署方式,仅供大家参考。 1.2 两种部署方式 第一种:是把环境和app都一起打成一个镜像&…

说说和的区别。

&和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false。 &&还…

软考知识点介绍--Redis数据库

软考知识点介绍--Redis数据库 一、公务员考试报考条件 在2018年的数据库系统工程师的考试中,出现了下面这道选择题: Redis是一种NoSQL数据库,具体地说,是________________存储数据库。 (A)键-值 &#…