我正在尝试合并几个具有以下配置的CSV文件:

File1

DATE;BS-ICI,NSA,BAL,AT;BS-ICI,NSA,BAL,BE;
2014M02;0.9;1.5;
2014M01;-5.4;-4.4;
2013M11;-7.9;-9.2;
2013M10;-8.6;-14.0;


File2

DATE;BS-BYL,NSA,BAL,AT;BS-NAN,NSA,BAL,BE;
2014M02;1.5;6.7;
2014M01;-8.8;-4.4;
2013M11;-2.5;-9.6;
2013M10;-8.9;-11.4;


我想按列合并它们,保留File1的第一列,但删除File2的第二列。所需的输出将是:

DATE;BS-ICI,NSA,BAL,AT;BS-ICI,NSA,BAL,BE;BS-BYL,NSA,BAL,AT;BS-NAN,NSA,BAL,BE;
2014M02;0.9;1.5;0.9;1.5;
2014M01;-5.4;-4.4;-5.4;-4.4;
2013M11;-7.9;-9.2;-2.5;-9.6;
2013M10;-8.6;-14.0;-8.9;-11.4;


我当时在考虑使用sed,但是我对它不熟悉,尤其是在专栏中。我以为命令paste,但找不到与我要执行的操作相关的任何内容。

任何建议都欢迎。

最好。

最佳答案

使用join命令:

$ join -t\; -j 1 file1 file2 | sed 's/;;/;/g'
DATE;BS-ICI,NSA,BAL,AT;BS-ICI,NSA,BAL,BE;BS-BYL,NSA,BAL,AT;BS-NAN,NSA,BAL,BE;
2014M02;0.9;1.5;1.5;6.7;
2014M01;-5.4;-4.4;-8.8;-4.4;
2013M11;-7.9;-9.2;-2.5;-9.6;
2013M10;-8.6;-14.0;-8.9;-11.4;


或者如果您不想通过管道传输到sed,则可以通过设置输出格式来做(稍微冗长一些):

$ join -t\; -j 1 -o 1.1 1.2 1.3 2.2 2.3 2.4 file1 file2
DATE;BS-ICI,NSA,BAL,AT;BS-ICI,NSA,BAL,BE;BS-BYL,NSA,BAL,AT;BS-NAN,NSA,BAL,BE;
2014M02;0.9;1.5;1.5;6.7;
2014M01;-5.4;-4.4;-8.8;-4.4;
2013M11;-7.9;-9.2;-2.5;-9.6;
2013M10;-8.6;-14.0;-8.9;-11.4;

09-28 01:54