我有一个shell脚本从表中获取数据并将其放在.csv文件中。我得到的数据是制表符分隔的,我用sed 's/\t/,/g'
。这有效,但我的数据也偶尔会出现逗号,比如" abc,def"。
现在当我打开.csv文件时,这个值被分割并移动到下一列,考虑到逗号,现在" abc"在一列中" def"在另一个。
如何处理此问题并使用逗号显示的值?或者我可以将逗号转换为管道符号(|
)并使.csv将管道符号标识为分隔符吗?
答案 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作为分隔符并在各列中正确分配值。