[英]How do I combine 2 csv files + all content + cygwin/bash/awk/sed/paste
如何合并2个CSV文件(finle1.csv和file2.csv)? 我已经探索过awk / sed / paste,但它超出了我的范围。
file1.csv
Time,Object,Integrity,KPI 1-A Name A unit(unit/s),KPI 2-A Name B unit(unit/s)
2014-06-04 11:00,ObjectA,100%,0.0316,0.0012
2014-06-04 21:00,ObjectB,100%,40.0332,7.2601
file2.csv
Time,Object,Integrity,KPI 1-C Name A unit(unit),KPI 1-D Name A unit(unit)
2014-06-04,ObjectA,100%,0.024,0.0014
2014-06-04,ObjectB,100%,60.6176,29.0913
whatIwant.csv
Time,Object,Integrity,KPI 1-A Name A unit(unit/s),KPI 2-A Name B unit(unit/s),Time,Object,Integrity,KPI 1-C Name A unit(unit),KPI 1-D Name A unit(unit)
2014-06-04 11:00,ObjectA,100%,0.0316,0.0012,2014-06-04,ObjectA,100%,0.024,0.0014
2014-06-04 21:00,ObjectB,100%,40.0332,7.2601,2014-06-04,ObjectB,100%,60.6176,29.0913
注意:我假设时间,对象将相应地排列。
这将用于N行。
每个文件中的列数也可能会增加。
我可能必须从whatIwant.csv
删除“第二时间”,“对象”,“完整性”列,但稍后可以执行此操作。
使用awk
:
awk -F, 'NR==FNR{a[$2]=$0;next}$2 in a{ print a[$2],$4, $5 }' OFS=, file1.csv file2.csv
Time,Object,Integrity,KPI 1-A Name A unit(unit/s),KPI 2-A Name B unit(unit/s),KPI 1-C Name A unit(unit),KPI 1-D Name A unit(unit)
2014-06-04 11:00,ObjectA,100%,0.0316,0.0012,0.024,0.0014
2014-06-04 21:00,ObjectB,100%,40.0332,7.2601,60.6176,29.0913
使用join
:
join -t, -j 2 -o 1.1 1.2 1.3 1.4 1.5 2.4 2.5 file1.csv file2.csv
Time,Object,Integrity,KPI 1-A Name A unit(unit/s),KPI 2-A Name B unit(unit/s),KPI 1-C Name A unit(unit),KPI 1-D Name A unit(unit)
2014-06-04 11:00,ObjectA,100%,0.0316,0.0012,0.024,0.0014
2014-06-04 21:00,ObjectB,100%,40.0332,7.2601,60.6176,29.0913
更新:
要加入日期和对象,您可以使用awk
作为join
只加入1列。
awk -F, 'NR==FNR{sub(/ .*/,"",$1);map[$1,$2]=$0;next}(($1,$2) in map){print map[$1,$2],$4,$5}' OFS=, f1 f2
Time,Object,Integrity,KPI 1-A Name A unit(unit/s),KPI 2-A Name B unit(unit/s),KPI 1-C Name A unit(unit),KPI 1-D Name A unit(unit)
2014-06-04,ObjectA,100%,0.0316,0.0012,0.024,0.0014
2014-06-04,ObjectB,100%,40.0332,7.2601,60.6176,29.0913
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.