如何将制表符分隔文件转换为逗号分隔文件

use*_*480 30 unix csv

我想将制表符分隔文件转换为csv文件

谁能帮我

ud3*_*3sh 36

OSX的答案是不同的.

MacOS \tsed表达式中不理解.

您必须使用ctrl+ vthen 将选项卡文字插入到sed搜索模式中tab(请参阅如何在OS X上插入带有sed的选项卡字符?)

sed 's/ /,/g' input_file > output_file
Run Code Online (Sandbox Code Playgroud)

  • 在OSX上,你可以使用理解`\ t`的GNU sed.[这个问题](http://stackoverflow.com/questions/30003570/how-to-use-gnu-sed-on-mac-os-x)是关于如何安装它的. (4认同)

cod*_*ict 33

您可以使用sed作为:

sed 's/\t/,/g' input_file > output_file
Run Code Online (Sandbox Code Playgroud)

这将保持输入文件不变,并将创建output_file包含更改的新文件.

如果要在不创建新文件的情况下更改输入文件本身,可以使用-ised选项进行内部更改:

sed -i 's/\t/,/g' input_file 
Run Code Online (Sandbox Code Playgroud)

  • 这在OS X中不起作用,它似乎与字母"t"匹配而不是标签. (6认同)

Tob*_*ght 6

请记住,有多种逗号分隔值文件。由于您未指定任何一种,因此我假设采用UTF-8编码的RFC-4180格式和TSV相同,只是使用制表符而不是逗号。

天真的方法是用逗号替换每个选项卡:

tr '\t' ,
Run Code Online (Sandbox Code Playgroud)

如果任何值已经包含逗号或任何包含引号的制表符,则此值下降。您需要最少地分析文件,以保持引用。无需手动滚动这样的解析器,而是使用已经编写的代码(例如Text::CSV用于Perl)更简单,更清晰,更灵活:

#!/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;
Run Code Online (Sandbox Code Playgroud)


Bor*_*lid -2

尝试用逗号替换所有制表符。

s/\t/,/g如果您没有任何带引号的字段,可能会使用像 这样的正则表达式。

或者,您知道,Excel 可以为您做到这一点。或者 R。或者任何可以接收 TSV 文件的东西。