我有一个逗号分隔文件,有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),但不是打印,而是用_交换它.最后,我们打印剩下的字段.
正如我所说,可能有更优雅的解决方案.我想知道其他人出现了什么.