使用命令行垂直拆分csv文件

时间:2018-01-07 07:39:58

标签: python bash csv command-line command

是否可以将csv文件垂直拆分为多个文件?我知道我们可以将单个大文件拆分成较小的文件,而不使用命令行提到的行。我有csv文件,其中列在某些列之后重复,并且我想按列分割该文件。如果不是那么可能,那么我们怎么能用python做呢?

对于Eg。 enter image description here

考虑上面的示例,其中站点和地址垂直呈现多次,我想创建包含单个站点和单个地址的3个不同的csv文件

任何帮助都将受到高度赞赏,

由于

3 个答案:

答案 0 :(得分:1)

假设您的输入文件名为~/Downloads/sites.csv,并且如下所示:

Google,google.com,Google,google.com,Google,google.com
MS,microsoft.com,MS,microsoft.com,MS,microsoft.com
Apple,apple.com,Apple,apple.com,Apple,apple.com

您可以使用 cut 创建3个文件,每个文件包含一对公司/网站:

cut -d "," -f 1-2 < ~/Downloads/sites.csv > file1.csv
cut -d "," -f 3-4 < ~/Downloads/sites.csv > file2.csv
cut -d "," -f 5-6 < ~/Downloads/sites.csv > file3.csv

说明:

对于 cut 命令,我们将逗号(,)声明为分隔符,它将每一行拆分为&#39;字段的集合。

然后我们为每个输出文件指定我们想要包含哪些字段。

HTH!

答案 1 :(得分:0)

如果定期重复站点地址对,那么:

awk '{
    n = split($0, ary, ",");
    for (i = 1; i <= n; i += 2) {
        j = (i + 1) / 2;
        print ary[i] "," ary[i+1] >> "file" j ".csv";
    }
}' input.csv

答案 2 :(得分:0)

以下脚本生成您想要的内容(基于根据您的需要调整的SO answer:列数,字段分隔符)。它将原始文件垂直拆分为2个列块(注意n=2)并创建3个不同的文件(tmp.examples.1tmp.examples.2tmp.examples.3或您为{{1}指定的任何文件变量):

f

如果您的awk -F "," -v f="tmp.examples" '{for (i=1; i<=NF; i++) printf (i%n==0||i==NF)?$i RS:$i FS > f "." int((i-1)/n+1) }' n=2 example.txt 文件包含后续数据:

example.txt