【问题标题】:How to append CSV files using unix Commands when the number of columns are different for different files当不同文件的列数不同时,如何使用 unix 命令附加 CSV 文件
【发布时间】:2013-02-20 21:32:10
【问题描述】:

我有几千个 csv 文件,每个文件都有不同的列标题集。我正在使用 python pandas 附加它们。我想知道是否有一种有效的方法可以在 UNIX 中附加这些文件。

例如。

CSV1:

Column1,Column2, Column3, Column4, Column5
1,aaa,bbb,0,NULL
2,aa1,bb1,,NULL

CSV2:

Column1,Column2, Column6, Column7, Column8
1,aaa,xyz,0,NULL
2,aa1,zy1,test-2,NULL


Required Output

Column1,Column2, Column3, Column4, Column5,Column6, Column7, Column8
1,aaa,bbb,0,NULL,,,
2,aa1,bb1,,NULL,,,,
1,aaa,,,,xyz,0,NULL
2,aa1,,,,zy1,test-2,NULL

完成附加两个文件后,值应与适当的列名对齐,并且第二个文件的标题应适当地附加到最终输出标题中,不得重复。

【问题讨论】:

    标签: shell unix csv append


    【解决方案1】:

    join -t , -1 1 -2 1 -o 1.1 -o 1.2 -o 1.3 -o 1.4 -o 1.5 -o 2.3 -o 2.4 -o 2.5 CSV1 CSV2

    似乎更好的方法

    & 你也可以使用cut 如下

    cat CSV2 | cut -f 1,3,4,5 -d , > tmp1

    join -t ',' -j 1 CSV1 tmp1

    【讨论】:

    • 你能帮我理解第一个加入命令的作用吗?对于使用剪切的建议,我不知道事先分别剪切它们的列字段。
    • 如果事先不知道每个文件的列数怎么办?
    • -t 表示, 的分隔符; -1 1 表示将file1的第一个字段连接到-2 1 file2的第一个字段; -o 表示输出,1.1 表示文件1的第一个字段;以下内容也是如此
    • 如果不知道clolumns的数量~好吧,也许你可以加入文件并通过awk命令搜索remove the duplicated field的一些方法;或者只是编写一个简单的 shell 来生成该列表。 :)
    【解决方案2】:
    awk -F, -v OFS="," 'FNR==NR{a[$1$2]=$0;next}($1$2 in a){x=$1$2;$1=$2="";gsub(/^,*/,"");print a[x]","$0}' file1 file2
    

    测试如下:

    > cat temp2
    Column1,Column2, Column3, Column4, Column5
    1,aaa,bbb,0,NULL
    2,aa1,bb1,,NULL
    > 
    > 
    > cat temp
    Column1,Column2, Column6, Column7, Column8
    1,aaa,xyz,0,NULL
    2,aa1,zy1,test-2,NULL
    > 
    > 
    > awk -F, -v OFS="," 'FNR==NR{a[$1$2]=$0;next}($1$2 in a){x=$1$2;$1=$2="";gsub(/^,*/,"");print a[x]","$0}' temp2 temp
    Column1,Column2, Column3, Column4, Column5, Column6, Column7, Column8
    1,aaa,bbb,0,NULL,xyz,0,NULL
    2,aa1,bb1,,NULL,zy1,test-2,NULL
    > 
    

    【讨论】:

    • 您好,感谢您的建议。但它不会产生所需的输出。它在 Id 值 1 和 2 上连接两行的值。相反,我希望看到 2 个不同 csv 文件中每一行的不同行,但他们必须确保附加列在最终输出中适当对齐
    猜你喜欢
    • 2012-10-23
    • 2016-06-06
    • 2013-12-28
    • 2013-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多