要将字符串拆分为数组,请awk
使用函数split()
:
awk '{split($0, a, ":")}'
# ^^ ^ ^^^
# | | |
# string | delimiter
# |
# array to store the pieces
如果未指定分隔符,则使用FS
,默认为空格:
$ awk '{split($0, a); print a[2]}' <<< "a:b c:d e"
c:d
我们可以给一个分离器,例如:
:
$ awk '{split($0, a, ":"); print a[2]}' <<< "a:b c:d e"
b c
这等效于通过以下方式进行设置FS
:
$ awk -F: '{split($0, a); print a[1]}' <<< "a:b c:d e"
b c
在gawk中,您还可以提供分隔符作为正则表达式:
$ awk '{split($0, a, ":*"); print a[2]}' <<< "a:::b c::d e" #note multiple :
b c
甚至通过使用第四个参数来了解分隔符在每个步骤中的作用:
$ awk '{split($0, a, ":*", sep); print a[2]; print sep[1]}' <<< "a:::b c::d e"
b c
:::
让我们引用GNU awk的手册页:
split(字符串,数组[,fieldsep [,sep]])
将字符串划分为由fieldsep分隔的片段,并将片段存储在数组中,并将分隔符字符串存储在seps数组中。第一块存储在中array[1]
,第二块存储在中array[2]
,依此类推。第三个参数的字符串值fieldsep是一个正则表达式,描述了在哪里拆分字符串(就像FS可以是一个正则表达式,描述了在哪里拆分输入记录)。如果省略fieldsep,则使用FS的值。split()
返回创建的元素数。seps是gawk
扩展名,seps[i]
是之间的分隔符array[i]
和array[i+1]
。如果fieldsep是单个空格,则任何前导空格都会进入seps[0]
,任何尾随空格都会进入seps[n]
,其中n是的返回值split()
(即数组中元素的数量)。
OFS
分隔,请在它们之间加上逗号,使print
它们成为独立的参数。