我从客户那里得到了一个格式错误的csv,就像这样在其中一个列上缺少引号
"ID","Name","Org_ID","TransType","Amount"
"1453","John Joe","AZ7629","CREDIT_CARD,"23.44"
在CREDIT_CARD之后观察缺少的引用。它应该读作" CREDIT_CARD"。 这个缺失的报价打破了我的处理器。 我需要预处理csv并在缺少它的任何行上添加这个缺失的引用。 有没有办法编写脚本? 该处理在夜间之后运行,并且手动更新是NO-OP。 csv的制作人将在他们的结尾处解决问题,但是在6月15日之前它不会按计划进行。 请帮忙。
答案 0 :(得分:2)
您可以使用sed
:
sed 's/\([^"]\),/\1",/'
答案 1 :(得分:1)
假设必须包含每个字段,您可以使用此perl命令行修复缺少的结束引号,以确保在记录结束之前存在偶数引号(否则它将为每个字段添加引号以逗号结尾):
perl -pe 's/(?<=[^"\n])(?=(?:,"[^"]*")*$)/"/' file
答案 2 :(得分:1)
awk
救援!
比sed版本更长,但更具可读性(在我看来),并且可以检测以记录更新的值。
$ awk -v RS=[,\n] -v q='"' '!/^"/{b=q} !/"$/{e=q}
{printf "%s", b $0 e RT; b=e=""}' file
标记化并添加缺少的引号