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
Post a Comment