以列为基础追加CSV文件



我正在尝试合并几个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;

awk可能会:

awk -F; -v OFS=; 'FNR==NR {a[$1]=$0;next} {print a[$1]$2,$3}' 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

在您的输出示例中,您对M02M01有一些差异,可能您写错了。

最新更新