Shell脚本 - 在.csv文件中将分隔符从逗号更改为管道

时间:2018-05-08 10:40:18

标签: shell csv

我有一个shell脚本从表中获取数据并将其放在.csv文件中。我得到的数据是制表符分隔的,我用sed 's/\t/,/g'。这有效,但我的数据也偶尔会出现逗号,比如" abc,def"。

现在当我打开.csv文件时,这个值被分割并移动到下一列,考虑到逗号,现在" abc"在一列中" def"在另一个。

如何处理此问题并使用逗号显示的值?或者我可以将逗号转换为管道符号(|)并使.csv将管道符号标识为分隔符吗?

3 个答案:

答案 0 :(得分:0)

更好地使用sed 's/\t/|/g'并使.csv将管道符号标识为分隔符。这将解决您的问题。

第二个选项: -

首先将,设为;并将所有标签\t替换为昏迷,。请咨询您的客户是否对此提案感到满意。

答案 1 :(得分:0)

如果您的目标程序只是Excel,那么在值周围加上双引号将起作用“abc,def”。同样已经讨论过here

"abc,def",ghi,ijk,lmn # this works with spreadsheet

我已尝试使用虚拟数据的sed命令,它可以工作。希望这也适用于您的真实数据。

jmaster:~/hackerrank$ cat -T test # below ^I are nothing but tab space
abc,def^Ighi^Ijkl^Imnm
abc,def^Ighi^Ijkl^Imnm
abc,def^Ighi^Ijkl^Imnm

jmaster@jenkins-master:~sed -e 's/\([^\t]*,[^\t]*\)/"&"/g' -e 's/\t/,/g' test
"abc,def",ghi,jkl,mnm
"abc,def",ghi,jkl,mnm
"abc,def",ghi,jkl,mnm

答案 2 :(得分:0)

感谢大家的回复。我发现使用" sep = |'在csv文件的第一行将告诉excel将|(管道)视为分隔符。我在shell脚本中包含了代码,将第一行插入" sep ="(在我的情况下为tab)。现在,当我在Excel中打开.csv时,它将tab作为分隔符并在各列中正确分配值。