Csv

在欄位中轉義分隔符時轉換分隔符

  • May 22, 2018

我有一個文本文件,其中的欄位由|. 我想將其轉換為,典型的 CSV。我試過用這個:

sed 's/|/,/g' test.txt > test.csv

但有些欄位中已經有逗號。例如:

var1|var2|var3
Potter, Harry|2|3

我該怎麼辦?

使用正確的 csv 解析器工具:

csvtool -t '|' -u ',' cat infile > outputfile
var1,var2,var3
"Potter, Harry",2,3

來自csvtool --help

-t   Input separator char.  Use -t TAB for tab separated input.
-u   Output separator char.  Use -u TAB for tab separated output.
cat
   This concatenates the input files together and writes them to
   the output.  You can use this to change the separator character.  

僅引用包含逗號的值:

$ sed 's/[^|]*,[^|]*/"&"/; y/|/,/' <infile
var1,var2,var3
"Potter, Harry",2,3

如果輸入已經包含雙引號字元,並且它們沒有用於 CSV 格式(如 for Riddle, Tom "Voldemort"|4|5),那麼對於大多數 csv 格式,您可以使用"":

$ sed 's/"/""/g; s/[^|]*[,"][^|]*/"&"/; y/|/,/' <infile
"Riddle, Tom ""Voldemort""",4,5

引用自:https://unix.stackexchange.com/questions/445232