我有很多csv文件,因为分隔符是','而我在阅读时遇到了问题,其中一个字段是一个用逗号分隔值在方括号中的列表。举个例子:
first,last,list
John,Doe,['foo','234','&3bar']
Johnny,Does,['foofo','abc234','d%9lk','other']
我想将分隔符更改为“|” (或其他任何)得到:
first|last|list
John|Doe|['foo','234','&3bar']
Johnny|Does|['foofo','abc234','d%9lk','other']
我该怎么做?我现在正试图使用sed,但任何有效的东西都可以。
答案 0 :(得分:2)
我不知道通过sed或awk是可能的,但你可以通过perl轻松完成。
$ perl -pe 's/\[.*?\](*SKIP)(*F)|,/|/g' file
first|last|list
John|Doe|['foo','234','&3bar']
Johnny|Does|['foofo','abc234','d%9lk','other']
运行以下命令以保存对该文件所做的更改。
perl -i -pe 's/\[.*?\](*SKIP)(*F)|,/|/g' file
答案 1 :(得分:0)
如果它在列表前总是2个值,您可以在perl中使用split
limit
参数:
perl -pe '$_ = join "|", split /,/, $_, 3' list
这将逗号分割为最多3个字段,然后将它们与管道连接在一起。 -p
开关意味着每行输入都存储为$_
并在之前处理,然后打印$_
。
输出:
first|last|list
John|Doe|['foo','234','&3bar']
Johnny|Does|['foofo','abc234','d%9lk','other']