在gawk手册中,我发现了两个函数patsplit
和split
。
我想知道他们的区别是什么?
目的我明白
split
,但是目的是什么patsplit
?
谢谢。
答案1
在 中split
,您提供一个分隔符;而在patsplit
你匹配一个模式之间分隔符:
$ echo 'foo,bar' | awk '{n = split($0,a,/,/); for(i=1;i<=n;i++) print a[i]}'
foo
bar
然而
$ echo 'foo,bar' | awk '{n = patsplit($0,a,/[^,]*/); for(i=1;i<=n;i++) print a[i]}'
foo
bar
答案2
split
匹配默认的字段分割,使用FS
(或特定的正则表达式,如果指定):它使用正则表达式来匹配字段分隔符。如果您指定FS=,
,则字段将通过逗号分隔 - 逗号本身不会出现在字段内容中,它们将出现在分隔符数组中(如果指定)。
patsplit
匹配字段模式分割,可以通过为 指定一个值来代替默认的字段分割FPAT
:它使用正则表达式来匹配字段内容。例如,如果您只对任何记录中给出的数字感兴趣,则可以指定FPAT="[[:digit:].]+"
或使用patsplit
该正则表达式来匹配所有连续的数字组,并将它们作为字段进行操作。