如果源文件是制表符分隔的,则输出文件也是制表符分隔的。根据您使用的软件,您应该能够正确加载制表符分隔的数据。
假设您正在使用Excel。如果输出文件的扩展名为.csv,则Excel在打开文件时默认使用逗号分隔的列。当然,这不适合你。但是,如果将文件重命名为具有其他扩展名,例如.txt,那么当您使用Excel打开它时,它将打开一系列对话框,您可以在其中指定格式,包括制表符分隔。
如果您想要保留.csv扩展名并让Excel自动打开它,那么您需要转换数据。这可以通过JREPL.BAT - a hybrid JScript/batch utility that performs a regular expression search and replace on text data轻松完成。 JREPL.BAT是纯粹的脚本,可以在XP以后的任何Windows机器上本机运行。
下面将每个值都包含在引号中,以防万一某个值包含逗号文字。
type *.txt 2>nul | jrepl "\t" "\q,\q" /x /jendln "$txt='\x22'+$txt+'\x22'" /o output.csv
当心:您使用的type *.txt
将如果您的任何来源的最后一行.txt文件不以回车结束失败。在这种情况下,下一个文件的第一行将被追加到前一个文件的最后一行。不好。
您可以通过在FOR循环中单独处理每个文件来解决该问题。
(for %F in (*.txt) do jrepl "\t" "\q,\q" /x /jendln "$txt='\x22'+$txt+'\x22'" /f "%F") >output.csv
以上是设计在命令行上运行的。如果在批处理脚本中使用,则需要一些变化:
(for %%F in (*.txt) do call jrepl "\t" "\q,\q" /x /jendln "$txt='\x22'+$txt+'\x22'" /f "%%F") >output.csv
注:我的回答假设没有文件包含引号的来源。如果它们包含引号,则需要更复杂的搜索和替换。但它仍然可以通过JREPL高效完成。
嗨,谢谢你的详细回复。我昨天结束了解决这个问题,与同事的帮助。我们做的是两步。首先连接文件,我在我的问题中写的方式。然后用一个逗号替换标签,这似乎是个诀窍。我会在稍后的地方写下我们的解决方案。 – 2014-12-02 18:34:18
@SasonTorosean - 如果您的任何制表符分隔的源文件包含逗号,那么如果仅用逗号替换制表符,则会得到错误的结果。你应该把你的值用引号括起来,就像我的答案一样。 – dbenham 2014-12-02 18:41:58