我需要一个 shell 脚本,通过将逗号保留在引号内,将 csv 文件转换为管道 (|) 分隔的文件

Sha*_*thi 2 shell

示例文件(test.csv):

"PRCD-15234","CDOC","12","JUN-20-2016 17:00:00","title, with commas, ","Y!##!"
"PRCD-99999","CDOC","1","Sep-26-2016 17:00:00","title without comma","Y!##!"
Run Code Online (Sandbox Code Playgroud)

输出文件:

PRCD-15234|CDOC|12|JUN-20-2016 17:00:00|title, with commas, |Y!##!
PRCD-99999|CDOC|1|Sep-26-2016 17:00:00|title without comma|Y!##!
Run Code Online (Sandbox Code Playgroud)

我的脚本(不起作用)如下:

while IFS="," read f1 f2 f3 f4 f5 f6; 
do  
    echo $f1|$f2|$f3|$f4|$f5|$f6;  
done < test.csv
Run Code Online (Sandbox Code Playgroud)

Tim*_*edy 6

(generate output) | sed -e 's/","/|/g' -e 's/^"//' -e 's/"$//'

或者

sed -e 's/","/|/g' -e 's/^"//' -e 's/"$//' $file

对于 3 个表达式:

  • -e 's/","/|/g' = 用","新的分隔符替换所有分隔符|

  • -e 's/^"//' = 删除前导"标记

  • -e 's/"$//' = 删除行尾"标记

这将保留任何碰巧在标题中的引号,只要它们与初始分隔符模式不匹配 ","