regex - 从逗号分隔文件中删除多余的逗号

标签 regex perl csv sed awk

我有一个包含 12 列的逗号分隔文件。

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

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

所以在上面的例子中,“Hey There,How are you”不应该有逗号。

我需要在第 5 列和第 6 列中删除多余的逗号。

最佳答案

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

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

但你是说,它五月有额外的逗号。你必须提供一个逻辑来判断是否有多余的逗号。

如果你知道逗号的数量,你可以使用 .这已被证明是一个很好的练习,我相信其他人会想出一个更优雅的解决方案,但我还是会分享我的:
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),而不是打印 , , 我们与 _ 交换.最后我们打印剩余的字段。

正如我所说,可能有一个更优雅的解决方案。我想知道其他人会怎么想。

关于regex - 从逗号分隔文件中删除多余的逗号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20198574/

相关文章:

c# - 系统编程语言和应用程序编程语言之间的区别

perl - 我可以将 Perl 的映射与数组切片一起使用吗?

javascript - 在没有服务器的情况下从java脚本调用perl

php - 在 csv 中查找字符串并添加到每一行

python - 无法使用 Python 将 JSON 文件转换为 CSV

linux - 使用awk比较csv文件的字段长度

regex - 使用正则表达式通过 Bash 检查范围

正则表达式:确定两个正则表达式是否可以匹配相同的输入?

Java 模式匹配需要太多时间来验证

python - 无法有效删除 ‘v’ 之前的字符串或删除 v 及之后的字符串