powershell - Combining Multiple CSV Files -


so i've been assaulting internet day looking way combine multiple csv files. keep running issue, no matter of 30+ powershell approaches i've looked up.

i'm trying combine multiple csv files one, in "full join" style. need end rows , columns csvs combined, exception want combine rows based on common identifier. discussion: "merging 2 csv files shared column", i'm looking 2 exceptions. first it's built 2 csvs , second drops rows if both csvs don't contain "name". i'd keep row if it's not in both csvs , create blank entries there no data in other csv.

csv1.csv

name,attrib1,attrib2  vm1,111,true vm2,222,false 

csv2.csv

name,attriba,attrib1  vm1,aaa,111 vm3,ccc,333 

csv3.csv

name,attrib2,attribb  vm2,false,yyy vm3,true,zzz 

desired combined result:

name,attrib1,attrib2,attriba,attribb  vm1,111,true,aaa, vm2,222,false,,yyy vm3,333,true,ccc,zzz 

anyone have ideas on one? if need more info end let me know.

update: here's current code attempt sqlite shell:

$db  = join-path $env:temp 'temp.db' $dir = "c:\users\username\downloads\csv combination" $outfile = join-path $dir 'combined.csv'  @" create table (name varchar(20),os varchar(20),ip varchar(20),contact varchar(20),application varchar(20)); create table b (name varchar(20)); create table c (name varchar(20),quiesce varchar(20)); create table d (name varchar(20),noquiesce varchar(20)); .mode csv .import '$((join-path $dir csv1.csv) -replace '\\', '\\')' .import '$((join-path $dir csv2.csv) -replace '\\', '\\')' b .import '$((join-path $dir csv3.csv) -replace '\\', '\\')' c .import '$((join-path $dir csv4.csv) -replace '\\', '\\')' d select a.name,a.os,a.ip,a.contact,a.application,c.quiesce,d.noquiesce   left outer join b on a.name = b.name   left outer join c on a.name = c.name   left outer join d on a.name = d.name union select b.name,a.os,a.ip,a.contact,a.application,c.quiesce,d.noquiesce b   left outer join on a.name = b.name   left outer join c on b.name = c.name   left outer join d on c.name = d.name union select c.name,a.os,a.ip,a.contact,a.application,c.quiesce,d.noquiesce c   left outer join on a.name = c.name   left outer join b on b.name = c.name   left outer join d on c.name = d.name; "@ | filesystem::"c:\users\username\downloads\csv combination\sqlite3.exe" $db >$outfile  remove-item $db 

this returns following error message:

sqlite3.exe : error: c:\users\brandon.andritsch\downloads\csv combination\csv1.csv line 1: expected 5 columns of data found 6

try this:

$db  = join-path $env:temp 'temp.db' $dir = "c:\some\folder" $outfile = join-path $dir 'combined.csv'  @" create table (name varchar(20),attrib1 varchar(20),attrib2 varchar(20)); create table b (name varchar(20),attriba varchar(20),attrib1 varchar(20)); create table c (name varchar(20),attrib2 varchar(20),attribb varchar(20)); .mode csv .import '$((join-path $dir csv1.csv) -replace '\\', '\\')' .import '$((join-path $dir csv2.csv) -replace '\\', '\\')' b .import '$((join-path $dir csv3.csv) -replace '\\', '\\')' c select a.name,a.attrib1,a.attrib2,b.attriba,c.attribb   left outer join b on a.name = b.name   left outer join c on a.name = c.name union select b.name,a.attrib1,a.attrib2,b.attriba,c.attribb b   left outer join on a.name = b.name   left outer join c on b.name = c.name union select c.name,a.attrib1,a.attrib2,b.attriba,c.attribb c   left outer join on a.name = c.name   left outer join b on b.name = c.name; "@ | sqlite3 $db >$outfile  remove-item $db 

you need sqlite command-line shell this.


Comments