加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 05:55:57 所属栏目:百科 来源:网络整理
导读:我有一个逗号分隔文件,有12列. 第5列和第6列存在问题(第5列和第6列中的文本相同,但它们之间可能有额外的逗号),其中包含额外的逗号. 2011,123456,1234567,12345678,Hey There,How are you,882864309037,ABC ABCD,LABACD,1.00000000,80.2500000,One Two 所以在
我有一个逗号分隔文件,有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),但不是打印,而是用_交换它.最后,我们打印剩下的字段.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读