Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 按列添加csv文件_Python_Bash_Sed_Awk_Append - Fatal编程技术网

Python 按列添加csv文件

Python 按列添加csv文件,python,bash,sed,awk,append,Python,Bash,Sed,Awk,Append,我正在尝试合并几个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

我正在尝试合并几个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,但我不熟悉它的用法,尤其是在专栏中。我以为命令是粘贴的,但是我找不到任何与我正在做的事情相关的东西

欢迎提出任何建议


最佳。

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

在您的输出示例中,
M02
M01
存在一些差异,可能是您编写了一些错误。

使用
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;

嗨,杰帕尔,你的回答很好。谢谢你的邀请。