有没有一种方法可以使用用于分割每个字段的特定字段分隔符来“重新打包”字段
Using gnu-awk
split() https://www.gnu.org/software/gawk/manual/html_node/String-Functions.html使用提供的正则表达式有一个额外的第四个参数用于匹配的分隔符:
s="hello;how|are you"
awk 'split($0, flds, /[;|]/, seps) {for (i=1; i in seps; i++) printf "%s%s", flds[i], seps[i]; print flds[i]}' <<< "$s"
hello;how|are you
更易读的版本:
s="hello;how|are you"
awk 'split($0, flds, /[;|]/, seps) {
for (i=1; i in seps; i++)
printf "%s%s", flds[i], seps[i]
print flds[i]
}' <<< "$s"
注意4号seps
参数输入split
它通过第三个参数中使用的正则表达式存储匹配文本的数组,即/[;|]/
.
当然它并不像RS
, ORS
and RT
,可以写成:
awk -v RS='[;|]' '{ORS = RT} 1' <<< "$s"