【发布时间】:2017-11-17 15:09:58
【问题描述】:
我有包含管道的数据,我想用逗号替换这些管道。以下是数据样本
"PT3QB789TSUIDF371261","THE TORONTO|DOMINION BANK","2016-05-24T00:36:42Z","ANZ BANK NEW| ZEALAND LIMITED","HZSN7FQBPO5IEWYIGC72","MAS|CA.ON.OSC|ASIC*|AAAA"
"PT3QB789TSUIDF371261","ABC|XYZ|123","2016-05-24T00:36:42Z","ANZ BANK NEW ZEALAND LIMITED","HZSN7FQBPO5IEWYIGC72","MAS|CA.ON.OSC|ASIC*"
我的输出应该是这样的
"PT3QB789TSUIDF371261","THE TORONTO,DOMINION BANK","2016-05-24T00:36:42Z","ANZ BANK NEW, ZEALAND LIMITED","HZSN7FQBPO5IEWYIGC72","MAS,CA.ON.OSC,ASIC*,AAAA"
"PT3QB789TSUIDF371261","ABC,XYZ,123","2016-05-24T00:36:42Z","ANZ BANK NEW ZEALAND LIMITED","HZSN7FQBPO5IEWYIGC72","MAS,CA.ON.OSC,ASIC*"
我尝试了以下对我不起作用的命令
awk -F"\"" 'BEGIN{OFS="\""}{for(i=1;i<=NF;++i){ if(i%2==0) gsub(/|/, ",", $i)}} {print $0}' file
【问题讨论】:
-
一个简单的
sed 's/|/,/g' file将适用于给定的样本.. 您使用awk的任何其他原因? -
你的命令的一个问题是
/|/...|是一个元字符,所以它应该是/\|/ -
为什么?这只会让你的文件在之后使用命令行工具更难做任何其他事情,因为他们需要额外的逻辑来区分字段内的逗号和字段之间的逗号。