我有一个像这样的文件
a b c,d
e f g
x y r,s,t
,我想使用“,”作为分隔符来分隔其列。其他列应复制。
预期结果:
a b c
a b d
e f g
x y r
x y s
x y t
谢谢
答案 0 :(得分:0)
使用awk。期望字段分隔符为空格或制表符:
$ awk '{
split($3,a,",") # split the third field on commas, hash to a
for(i in a) { # for all entries in a
sub(/[^ \t]+$/,a[i],$0) # replace last field with entries in a...
print # ... preserving separators, space or tab
}
}' file
a b c
a b d
e f g
x y r
x y s
x y t
由于使用sub()
,如果&
中有$3
,将产生错误的结果。另外,如注释中所述,使用for(i in a)
可能会导致记录输出看起来似乎是随机的。如果有问题,请使用:
$ awk '{
n=split($3,a,",") # store element count to n
for(i=1;i<=n;i++) { # iterate in order
sub(/[^ \t]+$/,a[i],$0)
print
}
}' file
对于制表符分隔的文件:
$ awk '
BEGIN { OFS="\t" } # output field separator
{
n=split($3,a,",")
for(i=1;i<=n;i++) {
$3=a[i] # & friendly version
print
}
}' file