正则表达式 – 从逗号分隔文件中删除额外逗号

前端之家收集整理的这篇文章主要介绍了正则表达式 – 从逗号分隔文件中删除额外逗号前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个逗号分隔文件,有12列.

第5列和第6列存在问题(第5列和第6列中的文本相同,但它们之间可能有额外的逗号),其中包含额外的逗号.

2011,123456,1234567,12345678,Hey There,How are you,882864309037,ABC   ABCD,LABACD,1.00000000,80.2500000,One Two

所以在上面的例子中“嘿那里,你好吗”不应该有逗号.

我需要删除第5和第6列中的额外逗号.

解决方法

如果您总想删除第5个逗号,请尝试

sed 's/,//5' input.txt

但是你说,它可能有额外的逗号.你必须提供一个逻辑如何找出是否有额外的逗号.

如果你知道逗号的数量,你可以使用awk.这已经证明是一个很好的练习,我相信其他人会提出一个更优雅的解决方案,但我会分享我的:

awk -f script.awk input.txt

用script.awk:

BEGIN{
    FS=","
}
NF<=12{
    print $0
}
NF>12{
    for (i=1; i<=4; i++) printf $i FS
    for (j=0; j<2; j++){
        for (i=0; i<=(NF-12)/2; i++){
            printf $(i+5)
            if (i<(NF-12)/2) printf "_"
            else printf FS
        }
    }
    for (i=NF-5; i<=NF; i++) printf $i FS
    printf "n"
}

首先,我们将字段分隔符设置为,.如果我们计算的数量少于或等于12个字段,一切都很好,我们只需打印整行.如果有超过12个字段,我们首先打印前4个字段(再次使用字段分隔符),然后我们打印两次字段5(和字段6),但不是打印,而是用_交换它.最后,我们打印剩下的字段.

正如我所说,可能有更优雅的解决方案.我想知道其他人出现了什么.

猜你在找的正则表达式相关文章