GNU awk 4.2发布,它包含许多有趣的功能.其中之一是:
- FIELDWIDTHS解析语法已得到增强,允许指定在字段开始之前要跳过的字符数.它还允许将'*'指定为表示"记录的其余部分"的最后一个字符.使用FIELDWIDTHS进行字段拆分现在可以正确设置NF.手册中的FIELDWIDTHS文档也进行了大量重组和改进.
我测试了这个*东西并且很好地抓住了最后一个块$NF:
# "*" catches in $NF from the 2+2+1=5th character and until the end
$ awk 'BEGIN {FIELDWIDTHS="2 2 *"} {print $NF}' <<< "1234567890"
567890
Run Code Online (Sandbox Code Playgroud)
但是,我看不出如何使用该功能的第一部分,这也在GNU Awk的用户指南→A.6 gawk功能的历史→gawk的4.2版中进行了描述,介绍了以下更改:
FIELDWIDTHS已得到增强,允许在为字段赋值之前跳过字符(请参阅按内容拆分).
我也找不到链接部分中的示例.那么,这个功能到底在做什么以及它是如何工作的?
GNU Awk文档有一个FIELDWIDTHSid定义的部分.
该部分/段落也有一些符号说明新功能" 在为字段赋值之前跳过字符 ".
这里是(突出显示的),来自控制awk的7.5.1内置变量:
FIELDWIDTHS#以空格分隔的列列表,用于说明
gawk如何使用固定的柱状边界拆分输入.从版本4.2开始,每个字段宽度可以选择以冒号分隔的值开头,指定在字段开始之前要跳过的字符数.分配值以FIELDWIDTHS覆盖字段拆分的使用FS和FPAT.
它是如何实践的:
假设我们想要在第1个字段之前跳过3个字符,在第2个字段之前跳过1个字符.
awk 'BEGIN {FIELDWIDTHS="3:2 1:2 *"} {print $1, $2}' <<< "1234567890"
Run Code Online (Sandbox Code Playgroud)
输出:
45 78
Run Code Online (Sandbox Code Playgroud)
所以3:2跳过123并设置45并1:2跳过6并设置78.