打印实际的字段分隔符值而不是正则表达式

use*_*952 2 regex awk gawk delimiter

鉴于以下输入:

check1;check2
check1;;check2
check1,check2
Run Code Online (Sandbox Code Playgroud)

awk命令:

awk -F';+|,' '{print $1 FS $2}'
Run Code Online (Sandbox Code Playgroud)

FS 应该包含选定的分隔符?

如何打印选定的分隔符,描述分隔符的正则表达式之一;,;;或者,不是.

如果输入check1;check2则输出应该是check1;check2.

kon*_*box 6

如果您正在使用GNU Awk(gawk),您可以使用以下第四个参数split():

gawk '{split($0, a, /;+|,/, seps); print a[1] seps[1] a[2]}' file
Run Code Online (Sandbox Code Playgroud)

输出:

check1;check2
check1;;check2
check1,check2
Run Code Online (Sandbox Code Playgroud)

在循环中使用它也很容易处理:

gawk '{nf = split($0, a, /;+|,/, seps); for (i = 1; i <= nf; ++i) printf "%s%s", a[i], seps[i]; print ""}' file

22011,25029;;3331,25275
6740,16516;;27292,1217
13480,31488;;7947,18804
328,30623;;12470,6883
Run Code Online (Sandbox Code Playgroud)

如果您只需要字段,则只需触摸即可a.分隔符将被分隔,seps并且它们的索引与之对齐a.