How to convert a tab separated file into comma separated file
我想将一个以制表符分隔的文件转换为csv文件
有人能帮我吗
OSX的答案是不同的。
macos不理解
您必须使用ctrl+v,然后使用t,将标签文字插入到SED搜索模式中(请参阅如何在OS X上插入带有SED的标签字符?)
1 | sed 's/ /,/g' input_file > output_file |
您可以使用sed作为:
1 | sed 's/\t/,/g' input_file > output_file |
号
这将保持输入文件不变,并将创建一个新文件
如果要在不创建新文件的情况下更改输入文件本身,可以使用
1 | sed -i 's/\t/,/g' input_file |
请记住,逗号分隔值文件有很多种味道。由于您没有指定一个,所以我假设RFC-4180格式,采用UTF-8编码,TSV是相同的,但使用制表符而不是逗号。
简单的方法是用逗号替换每个标签:
1 | tr '\t' , |
。
如果任何值已经包含逗号,或者如果任何值包含带引号的制表符,则此值将下降。您需要最少地解析文件,以保持引用。与手动滚动这样的解析器不同,使用已经编写的解析器(如
1 2 3 4 5 6 7 8 9 10 11 12 | #!/usr/bin/perl -w use Text::CSV; my $tsv = Text::CSV->new({ sep_char =>"\t", auto_diag => 2 }); my $csv = Text::CSV->new(); while (my $row = $tsv->getline(*ARGV)) { $csv->print(STDOUT, $row) or die $csv->error_diag(); print $/; } $csv->error_diag() unless $tsv->eof; |
。
这也可以通过Perl实现:
要将结果通过管道传输到新的输出文件,可以使用以下内容:埃多克斯1〔3〕
如果要就地编辑文件,可以调用-i选项:江户十一〔四〕号
如果您偶然发现所处理的不是真正的制表符,而是多个空格,则可以使用以下命令将两个或多个空格的每次出现替换为逗号:埃多克斯1〔5〕
请记住,
这是所有语言的常见问题吗?好的,这是我的haskell解决方案:
1 2 3 4 5 6 7 8 | main = interact (unlines . replTab . lines) where replTab l = l >>= (\line -> """ ++ line""">>= \char -> case char of '\t' ->"","" '"' ->"""" _ -> [char] ) |
。
没有测试,但应该有效。
PS:所有其他解决方案都不知道如何转义逗号。
sed-e's/tab_char/,/g'data.tsv>data.csv
最棘手的部分是如何在命令行中输入制表符,这样做:只需按"ctrl+v",然后按tab键
我经常在mysql查询中使用-e参数,如本文http://blog.modsay.com/2013/12/exporting-data-from-remote-mysql.html所述。
在Unix中:
1 | sed -i -e 's/\t/,/g' filename |
尝试用逗号替换所有标签。
如果没有任何带引号的字段,可以使用类似于
或者,你知道,Excel可以帮你做到这一点。或者R.或者任何可以接收TSV文件的东西。