如何在第n列之后更改字段分隔符

时间:2014-12-22 14:26:45

标签: bash awk sed

我有一个包含数千行的文件,如下所示

32322621661395926569;adverline;www.societe.com_societe;identite;Salarie2;fiche;btp_et_construction;CA4
32322621661395926569;adverline;www.societe.com_societe;identite;Salarie2;fiche;energy;CA4;nunuc_muchemuche

分隔符由;完成。我试图在第4列之后更改分隔符。因此,identite之后的每个分号都将更改为,

我试过了

awk '$4=$4' FS=";" OFS="," filename 

但它正在将所有内容更改为逗号。

如果你有任何提示,我会全力以赴。

2 个答案:

答案 0 :(得分:7)

您可以specify the occurrence使用sed

sed 's/;/,/4g' file

结果:

32322621661395926569;adverline;www.societe.com_societe;identite,Salarie2,fiche,btp_et_construction,CA4
32322621661395926569;adverline;www.societe.com_societe;identite,Salarie2,fiche,energy,CA4,nunuc_muchemuche

答案 1 :(得分:1)

这段perl代码应该可以工作。

#!/usr/bin/perl

open FH, $filename; # fill it in
while (<FH>){
    my @elems = split ';', $_;
    push @elems, join ',', splice @elems, 3, @elems - 3;
    print join ';', @elems;
}