如何在csv文件中添加缺少的引用

时间:2016-04-29 15:59:34

标签: regex bash awk

我从客户那里得到了一个格式错误的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日之前它不会按计划进行。 请帮忙。

3 个答案:

答案 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

标记化并添加缺少的引号