我有一个包含 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 .这已被证明是一个很好的练习,我相信其他人会想出一个更优雅的解决方案,但我还是会分享我的:
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/