将文本拆分为csv中的不同列

时间:2017-08-02 06:57:46

标签: linux csv text-processing

我在csv文件分隔的逗号的第一列中包含所有数据。如何将数据拆分成不同的列(我的意思是每个用逗号分隔的单词应该在不同的单元格中)。

输入(在excel中显示A列):

name,age,city
john,21,london
michael,25,sydney

输出:A1列包含名称,B1包含年龄,C1城市,A2约翰等

请解释我需要在linux中使用哪个命令

3 个答案:

答案 0 :(得分:0)

如果您只是想用管道替换逗号,可以使用以下内容:

sed 's/,/|/g' filename.csv

答案 1 :(得分:0)

使用命令,如:

column <filename>

column -c20 <filename>

使用帮助找到更多选项:

column --help

来源在这里:https://www.lifewire.com/file-contents-in-column-format-linux-4018107

(我在Linux ubuntu 17.04上测试这个命令)

答案 2 :(得分:0)

在这种情况下,方便的是创建脚本而不是命令行,并使用特定的函数来格式化给定样式的输出;然后将它用于不同的行。

这是一个解决perl的解决方案,正如问题所要求的那样:

 #!/usr/bin/perl

 my $myformat="%-30s%5s%-30s%5s%-30s\n"; 
 my $pad="-"x30; 

 sub myprint {
     my $format = shift;
     my $separator = shift;
     my @final;
     foreach my $x (@_) {
        push(@final,$x,$separator);
     }
     pop @final; # delete last separator
     printf $format,@final;
 }

 my $l=0;
 while(<>) {
    chomp; 
    next if($_ eq "");
    $l++; 
    myprint($myformat,"  |  ",split(/,/));  
    if($l==1) { 
        myprint($myformat,"--|--",$pad,$pad,$pad);
    }
}

然后使用它:

# cat my_input_file.txt | perl myscript.pl