你如何在GNU Awk 4.2中跳过使用FIELDWIDTHS的字符?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了你如何在GNU Awk 4.2中跳过使用FIELDWIDTHS的字符?相关的知识,希望对你有一定的参考价值。

GNU awk 4.2 was released它包含许多有趣的功能。其中之一是:

  1. FIELDWIDTHS解析语法已得到增强,允许指定在字段开始之前要跳过的字符数。它还允许将'*'指定为表示“记录的其余部分”的最后一个字符。使用FIELDWIDTHS进行字段拆分现在可以正确设置NF。手册中的FIELDWIDTHS文档也进行了大量重组和改进。

我测试了* thingie并且很好地抓住了$NF的最后一个块:

# "*" catches in $NF from the 2+2+1=5th character and until the end
$ awk 'BEGIN {FIELDWIDTHS="2 2 *"} {print $NF}' <<< "1234567890"
567890

但是,我无法看到如何使用该功能的第一部分,这也在GNU Awk's Users Guide → A.6 History of gawk Features → Version 4.2 of gawk introduced the following changes中描述:

FIELDWIDTHS已得到增强,允许在为字段赋值之前跳过字符(请参阅Splitting By Content)。

我也找不到链接部分中的示例。那么,这个功能到底在做什么以及它是如何工作的?

答案

GNU Awk文档有一个FIELDWIDTHS id定义的部分。 该部分/段落也有一些符号说明新功能“在为字段赋值之前跳过字符”。

来自7.5.1 Built-in Variables That Control awk的(突出显示):

FIELDWIDTHS

以空格分隔的列列表,告诉gawk如何使用固定的柱状边界拆分输入。从版本4.2开始,每个字段宽度可以选择以冒号分隔的值开头,指定在字段开始之前要跳过的字符数。为FIELDWIDTHS分配值会覆盖使用FSFPAT进行字段拆分。


它是如何实践的:

假设我们想要在第1个字段之前跳过3个字符,在第2个字段之前跳过1个字符。

awk 'BEGIN {FIELDWIDTHS="3:2 1:2 *"} {print $1, $2}' <<< "1234567890"

输出:

45 78

所以qazxsw poi跳过qazxsw poi并设置qazxsw poi和qazxsw poi跳过6并设置3:2

以上是关于你如何在GNU Awk 4.2中跳过使用FIELDWIDTHS的字符?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Selenium 和 Python 在控制台中跳过调试日志

如何在推送事件中跳过 GitHub Actions 作业?

如何在 Moshi 中跳过 JSON 属性?

如何使用 VBA 在 Excel 中跳过缺少 html 标记的行

如何在函数调用中跳过可选参数?

如何在 ddd (gdb) 中跳过过去的循环