【发布时间】:2013-01-28 12:18:55
【问题描述】:
我有一个 CSV 文件,如下所示:
height, comment, name
152, he was late, for example, on Tuesday, Fred
162, , Sam
我无法解析此文件,因为它在注释字段中包含可变数量的未括起来的逗号(但没有其他字段)。我想使用awk(这对我来说很新)修复文件,以便第二个字段中的逗号变为分号:
height, comment, name
152, he was late; for example; on Tuesday, Fred
162, , Sam
(将整个字段括在引号中并不能解决我的问题,因为我的 CSV 解析器不理解引号。)
到目前为止,我正在考虑使用 NF 计算未括起来的逗号的数量,然后使用 gsub 将它们替换为令人不快的正则表达式,但我觉得我应该能够利用 awk 来编写更具可读性的程序,但我不是肯定 NF 会这样。
【问题讨论】:
-
Fred后面真的有逗号吗?太丑了,真的有多少个字段?如果文件有随机逗号 other 而不仅仅是嵌入的,那么我认为这个问题需要先解决。
-
如果你能确定额外的逗号每次都在字段2中,如果NF==6,那么你有3个额外的逗号,你可以暂时把第一个和最后一个改成别的,然后将剩余的逗号更改为分号(当然,一次一行)。但是,当然,这确实不是一个灵活的长期解决方案。为什么不使用永远不会出现在数据中的 FS 值导出数据?祝你好运。
-
@DigitalRoss Fred后面没有逗号;那是一个错字。感谢您指出这一点。
-
@shellter 不幸的是,我无法访问原始数据库,因此无法选择不同的 FS。我不太担心它不是一个灵活的解决方案,因为数据是固定的并且不会改变。我会尝试为这个问题添加一个潜在的解决方案。
-
第一个字段总是一个数字,最后一个字段总是一个单词吗?