awk学习笔记

Ubuntu升级遇到grub-efi-amd64-signed报错?3步搞定这个烦人的EFI目录问题 本文详细解析了Ubuntu系统升级时遇到的“grub-efi-amd64-signed”报错及“cannot find EFI directory”问题。通过剖析UEFI启动机制与EFI系统分区原理,提供了从诊断到修复的三步解决方案,帮助用户快速解决因EFI目录未挂载导致的升级中断,确保系统引导正常。 阅读详情

看完sed部分之后

花了几个晚上看完后面 awk 部分。awk 不同于 sed,它是一门模式匹配的程序设计语言。学习 sed 和 awk 时,正则表达式可能是一大障碍。但事有凑巧,去年我暑假我一个人出去散心时,顺带看完了《精通正则表达式(第三版)》,另外我还掌握一些 Bash、Perl 等脚步编程的经验,因此很快就能适应 awk 的风格。

写到此处,我突然联系到《倚天屠龙记》中的张无忌,他经常说“我有九阳神功护体,学什么武功都很快”;那我们程序员也可以牛气地喊“我掌握了正则表达式,UNIX下工具上手都很快”,哈哈。

环境的问题

比起 sed,使用 awk 时让我有点小意外,哈哈。

、Debian 5.0 默认安装的 awk 是 mawk。我一开始以为是 GNU awk,直到测试“gensub”函数(gawk特有)时才发现不对,于是通过 CD 盘安装了 GNU awk。到目前为止,gawk 的最新版本是 3.1.7,但 Debian 5.0 的软件包中提供的是 v3.1.5。而 fedora 默认安装的是 gawk v3.1.5,另外我在 Windows 下也使用 gawk.exe v3.1.5。

、在上文《sed单行脚本学习笔记》中已经提到用模式“[ -~]”来匹配任意可打印字符,这个特性在 mawk 中也可使用。理论上在 GNU gawk 中不能使用,但在 Windows 平台下的 gawk 却也具备此特性。为保持脚本的可移植性,应该用“[:print:]”来代替。

、gawk 支持扩展的正则表达式,在文档中指出操作符“/B”可以匹配单词中字符与字符之间的空白位置。例如模式“//Bour/”可以匹配“course”,不能匹配“our”。但这一特性在 gawk v3.1.5 中实现有问题。

$ cat data
ABCDE
ABCD
ABC
AB
A
$ awk --version | head -1
GNU Awk 3.1.5
$ awk '{gsub(//B/,"-")}1' data
A-B-C-DE
A-B-CD
A-BC
A-B
A

如上所示,当单词长度大于二,在 gsub 中“/B”不能匹配最后一个空白位置。这个问题在 gawk v3.1.6 版本被修复。

$ gawk-3.1.6/gawk --version | head -1
GNU Awk 3.1.6
$ gawk-3.1.6/gawk '{gsub(//B/,"-")}1' data
A-B-C-D-E
A-B-C-D
A-B-C
A-B
A

这到底算不算 bug,也只有 gawk 的维护者说了算,哈哈。

awk单行脚本

较少的设施总能给人带来更多的快乐。awk 作为一门编程语言,它的能力比原作者预期的更多,一些 sed 很费劲要完成的事情它能轻易完成。这造成的结果是,在大多数情况下用 awk 完成任务后,不会像 sed 一样让你兴奋不已,因为杀鸡用了牛刀,显得理所当然。

另一方面,一门抽象的语言不仅拥有丰富的表达能力,也有更具可读性的语句,使得语句不会过分精练。同样是输出,awk 中是“print”、sed 中只需一个字符“p”。

综上原因,用 awk 来编写只要 65 个字符的单行脚本显得勉强,下面罗列《AWK单行脚本快速参考》中几段精练的脚本。

这段脚本使用了 awk 的隐含动作:“{print $0}”。awk 中只要当值为 0 或空("")时才为“False”,否则都是“True”,而 NF 只有在空行上才为 0。因此整个语句的意思就是“但当前行的字段数大于0时,显示该行”。

这段脚本同样使用了隐含的打印动作。awk 的数组是一种关联数组,允许用字符串或数值做下标(事实上数值会先根据 CONVFMT 规则来转换成字符串),因此所谓的数组其实更像是键/值映射。通过关联数组来记录每一行的出现次数,且仅在第一次出现时输出。

单行脚本中的错误

其中“printf("%s",i)”应该是“printf("%s",$i)”。这是译文中的错误,原文中正确。

运算符“!~”为“不匹配”,运算符右边可以是 awk 中任意表达式,awk 将它作为一个字符串并用来指定一个正则表达式。由此,这段代码不能正确处理以下数据:

$ cat data
ABCDE
ABCD
ABC
AB
A
$ awk 'a !~ $0; {a=$0}' data
ABCDE

需要将匹配改成比较,即“awk 'a != $0; {a=$0}'”。


版权声明

请尊重原创作品。转载请保持文章完整性,并以超链接形式注明原始作者“redraiment”和主站点地址,方便其他朋友提问和指正。

联系方式

我的邮箱,欢迎来信(redraiment@gmail.com
我的Blogger(子清行):http://redraiment.blogspot.com/
我的Google Sites(子清行):https://sites.google.com/site/redraiment
我的CSDN博客(梦婷轩):http://blog.csdn.net/redraiment
我的百度空间(梦婷轩):http://hi.baidu.com/redraiment

脑肿瘤MRI图像分割实战:基于U-Net的深度学习完整指南 脑肿瘤是中枢神经系统最常见的疾病之一,全球每年有超过30万人被诊断为原发性脑肿瘤。在临床诊断和治疗过程中,磁共振成像(MRI)已成为评估脑肿瘤的标准影像学检查方法。然而,手动分割MRI图像中的肿瘤区域是一项耗时且依赖于专家经验的工作,不同医生之间可能存在显著差异。 阅读详情

相关推荐

语言模型原理与工程实践:行业大语言模型的评测:以金融行业大语言模型为例

语言模型、金融行业、模型评测、自然语言处理、深度学习、Transformer、BERT、GPT 1. 背景介绍 近年来,大语言模型(Large Language Model,LLM)在自然语言处理(Natural Language Processing,NLP)领域取得了突破性的进

AI大模型应用之禅 124

awk 学习笔记

是一个功能强大的文本处理工具,适用于处理结构化的文本数据。通过掌握基本命令、常用函数和实用脚本,你可以高效地处理和分析数据。希望这些学习笔记对你有所帮助!的知识,包括常用的命令、函数和一些实用的脚本示例。这些内容可以作为学习笔记,帮助你更好地理解和使用。脚本保存为文件,方便重复使用。好的,我将为你总结关于。:确保字段分隔符正确。

2302_80012625的博客 607

动态规划之【树形DP】第3课:树形DP应用案例实践2

动态规划之【树形DP】第3课:树形DP应用案例实践2

王老师青少年编程 725

AWK学习笔记

AWK学习笔记目录AWK学习笔记 简介 基本使用方法 格式 调用方式 命令部分的构成 示例 正则表达式待补充 字符集待补充 awk内置变量待补充参考资料 简介 awk是Unix环境下用于格式化文本,并按一定条件进行筛选显示的工具。 awk以发展这种语言的人Aho.Weninberger和Kernigham命名。 基本使用方法格式 基本格式和说明: awk [-F filed -separator]

lewisaa的专栏 543

The AWK Programming Language学习笔记(二)Awk语言

一 概述 核心: 1)'没有模式只有动作语句' -->'每行都匹配' 2)'只有模式没有动作语句' -->默认动作语句是'print' (1.1)文件源 文件 --> 'countries' USSR 8649 275 Asia Canada 3852 25 North America China 3705 1032 Asia USA 3615 237 North America Brazil ..

wzj_110的博客 368

awk java_awk学习笔记(实时更新ing ...)

前言年前杂事比较多一些,特别涉及到对一些日志文本的分析,早就知道awk是这方面处理的神器,在写恶心的php间隙学习一下,虽然我觉得自己的php写的非常规范了,但是那种哦敢调用api、调用扩展的方式还是让我觉得恶心,虽然很方便,话不多说,开始awk学习,可能会分阶段完成这篇文章,有时间就记录一些吧awk程序设计模型awk程序是由所谓的主输入(main input)循环组成的。一个循环是一个例程,它将...

weixin_31970409的博客 391

awk学习笔记

awk编程能力强大,文本处理能力突出。 首先,来看使用awk的一个例子: 比如,列出最常用的五个历史命令: 结合其他命令,我们给出结果: awk ‘{print $1}’ ~/.bash_history | sort | uniq -c | sort -rn | head -n 5 从这个例子可以看出,awk确实神奇,好用。是得好好学习一番了。awk要学习以下要点: 首先准备一个材料,xinxi.txt (1)print命令 print打印指定部分 例如: awk '{print $0}‘ xinxi.t

jicongyuan的博客 1157

AWK 学习笔记

原创:http://blog.csdn.net/skydreamer01/article/details/3600628 AWK学习笔记 1 AWK简介     AWK是Alfred V.Aho, Peter J.Weinberger,Brian W.Kerninghan三人在1977设计和实施的,最初是为了试验Unix中的grep和sed工具怎样可以一般化地在文本之外还能处理数据(grep

不见黑眼圈 的专栏 1127

linux 桌面背景随心换

偶然间在网上找到了一百张美图~都是自然风景画。据说能养眼哦~地址请看这里我的桌面背景也是该换换了,不过手工换这一百张可不好玩。windows下有桌面随心换这个现成的软件;kde下也自带这个功能。但我用的是gnome,找了半天还是没找到自带的功能。所以写了一个python脚本,让它隔10分钟换一张桌面背景。感觉好炫哈~ #!/usr/bin/env pythonBACKG

子清行 4万+

用curl命令,post提交带空格的数据

今天偶然遇到一个情况,我想用curl登入一个网页,无意间发现要post的数据里带空格。比如用户名为"abcdef",密码为"abc def",其中有一个空格,按照我以前的方式提交:curl -D cookie -d "username=abcdef&password=abc def" http://login.xxx.com/提示登入失败。于是查看curl手册man curl。找到:

子清行 2万+

发现校内网好友买卖的一个小漏洞!并成功实现自动好友买卖!

//有些网站通过网络爬虫转载文章都不写明文章出处,请保留文章原作者:redraiment公告:因为服务器要转让,我将不再有可使用的服务器。因此挂机站点将于2008年11月6日0时关闭。最新消息:客户端版AutoAuto preview 1已发布,详情查看最新日志。最新消息:我写了一个脚本,免费提供大家在线挂机,目前还在测试阶段,每天最多只能提供60个人同时挂机。欢迎大家前来测试体验。具体参见htt

子清行 9777

用DOS批处理来做数字图像处理

前言:我最近对语言挺着迷的,很想学习一下《编译原理》。询问了老师才知道我们已经取消了这么课程(他们觉得学了没用) ,一时间也没找到什么好的教材,如果有好心的朋友可以推荐几本关于编译原理的经典书籍,感激不尽!图灵机是由输入、输出和状态转移函数三要素组成的,广义上的自动机模型。理论上讲任何任何完备图灵机语言都可用于通用编程,并且和其他完备图灵机语言一样有效。但实际上有些此类语言作用在其特定领域之外

子清行 8063

内网IP自动获取

在寝室上内网真的是很闹心呀~稍微迟点开机,IP 地址就被别人抢去了。昨晚九点放学后,一直等到十点半才连上,实在忍无可忍了!IP 被抢后解决方法无非就是找一个没被占用的地址,但手工去测试 256 个地址太折磨人了,早些时候我们班的两个同学就分别用 Java 和 C# 来实现过类似的小工具。但解决这样的小问题有点杀鸡用牛刀的感觉,不符合我的性格^_^,我当然还是用批处理来解决。批处理中核心的两

子清行 7830

Shell中同时读多个文件

一个文件分割成多个文件有时需要提取文件中的一个或多个列元素生成新的文件,这一操作在 Shell 里很容易实现。比如有一个数据文件 data,有三列信息:姓名、学号、班级。redraiment 0612800134 0601christine 0612800136 0601zb 0612800229 0602现在需要这个文件的第一列和第二列信息分别存到文件 f1 和 f2

子清行 6198

批量检测可用域名

在《内网IP自动获取》的评论中,有个网友希望能帮忙写一个批处理来批量检测域名的可用性。但前两天都在赶文档,刚刚接到老师电话说推迟到10月08日交,心头大石终于落地^_^。所以就马上开工帮那位朋友实现这个批处理!原理很简单,就是找一个域名注册网站(比如我这里找的中国域名为 http://www.chinadomain.com.cn/),这类网站一般都提供了域名查询功能,我们只要用 curl 等命

子清行 5838

在 Cygwin 下编译 netcat_1.10-38

在 Cygwin 里手工编译并安装 netcat_1.10-38 版本,并模式 WireShark 的监听功能。

子清行 5810

awk去除C语言注释

今天闲逛Linux宝库,看到论坛里有人在讨论如何用 shell 脚本来处理 C 语言注释,发帖时间是 08-10-23(以前怎么都没注意到,失败...),但问题好像并没被解决。正好这两天玩 sed & awk,来小试一下身手。C语句注释本文讨论的是 C99 标准,它支持单行注释(“// ...”)和块注释(“/*...*/”),并且当单行注释以“/”结尾时也可以跨多行。测试代码如下:#

子清行 5259

[JavaScript] 数字金额大写转换 v2

几天前分享了一段 JavaScript 版的《整数金额大写转换》,不过只能处理整数的。刚刚做了一个改进,可以处理两位小数(角和分)和负数(欠款)。function digit_uppercase(n) { var fraction = [角, 分]; var digit = [ 零, 壹, 贰, 叁, 肆,

子清行 4075

Linux下用nc实现DuplexPipe

nc 是一把网络的瑞士军刀,我以前在介绍 DuplexPipe 时也提到过,如果你没接触过它,可以先参看一下《DuplexPipe二三事(二)》。再来简单地介绍一下 DuplexPipe,顾名思义,它是一个“双向管道”。在 shell 中,我们通过“|”使用匿名管道,让前一条命令的输出作为后一条命令的输入;双向管道即在此基础上在加上“后一条命令的输入作为前一条命令的输入”。这是最初开发它的原因,但

子清行 3981

STM32F767-SOEM-控制1个电机转圈圈-PP模式(位置模式)-添加代码注释-CSDN.rar

EtherCAT主站-SOEM专栏的源代码。EtherCAT主站SOEM -- 26 -- STM32F767-SOEM通过 PP模式(位置模式)控制一个电机转圈圈。博客链接:( https://blog.csdn.net/qq_50808730/category_12482257.html )视频链接: ( https://space.bilibili.com/436089624/channel/collectiondetail?sid=1893755&ctype=0 )硬件环境:基于正点原子开发板阿波罗 STM32F767IGT6 上进行搭建SOEM主站。源代码 主要功能:初始化MAC,配置EtherCAT网络,等待从站进入OP状态,检查EtherCAT主站和从站状态等等。并且对1个EtherCAT从站 电机进行操作,通过 PP模式(位置模式)控制一个电机转圈圈,正转,反转及停止,及电机运行过程中停止。key0是电机使能、key1是电机反转、key2是电机正转 、 key_UP是电机停止。

毕业设计&课设-使用Matlab代码实现LBM流体模拟以模拟多孔介质中的流动.zip

matlab算法,工具源码,适合毕业设计、课程设计作业,所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!matlab算法,工具源码,适合毕业设计、课程设计作业,所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!matlab算法,工具源码,适合毕业设计、课程设计作业,所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!matlab算法,工具源码,适合毕业设计、课程设计作业,所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!matlab算法,工具源码,适合毕业设计、课程设计作业,所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!matlab算法,工具源码,适合毕业设计、课程设计作业,所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随

上一篇: sed单行脚本学习笔记
下一篇: 用awk去除C语言注释
redraiment
博客等级 码龄20年 1145粉丝 108原创
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值