2
所以我一直在毆打互聯網整天尋找一種方法來結合多個CSV文件。無論我查找的30多種PowerShell方法中有哪一種,我都會遇到問題。合併多個CSV文件
我想將多個CSV文件合併爲一個,實質上是「完全連接」風格。我需要結合來自所有CSV的所有行和所有列的組合,除了我想基於公共標識符組合行之外。這個討論:「Merging two CSV files by shared column」,正是我想要做的兩個例外。首先它只爲兩個CSV構建,如果兩個CSV都不包含「名稱」,則它將丟棄行。我想保留該行,即使它不在兩個CSV中,也只是在其他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
期望綜合作用的結果:
Name,Attrib1,Attrib2,AttribA,AttribB
VM1,111,True,AAA,
VM2,222,False,,YYY
VM3,333,True,CCC,ZZZ
任何人有這個什麼想法?如果您需要我的更多信息,請告訴我。
更新:這是我當前的代碼嘗試與SQLite的外殼:
$db = Join-Path $env:TEMP 'temp.db'
$dir = "C:\Users\UserName\Downloads\CSV Combination"
$outfile = Join-Path $dir 'combined.csv'
@"
CREATE TABLE a (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 '\\', '\\')' a
.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
FROM a
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
FROM b
LEFT OUTER JOIN a 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
FROM c
LEFT OUTER JOIN a 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
目前這返回以下錯誤信息:
sqlite3.exe:錯誤:C:\用戶\ brandon.andritsch \下載\ CSV組合\ csv1.csv線1:預期數據的5列,但發現6
嗨Ansgar,感謝這個腳本,我不知道我將能夠獲得SQLite設置,我沒有實際將它放在System32目錄中的權限。 我能夠得到它運行(我認爲)使用本地配置文件目錄,這裏是我回到我的錯誤: sqlite3.exe:錯誤:未知的命令或無效的參數:「導入」。輸入「.help」以獲得幫助 – user2600210
命令行shell是一個帶有單個可執行文件的Zip存檔。簡單地將它解壓到你的'%PATH%'目錄中。至於錯誤:命令是'.import',而不是'import'。 –
'.import $((Join-Path $ dir csv1.csv)-replace'\\','\\')a'' ''.import $((Join-Path $ dir csv2.csv) - 替換'\\','\\')b'' ''.import $((Join-Path $ dir csv3.csv)-replace'\\','\\')c'' 這些是我使用的命令 - 我不知道%PATH%指的是什麼,在此之後我沒有看到一個變量,當它位於當前工作目錄中時,出現以下錯誤: 術語'sqlite3.exe'不被識別爲cmdlet,函數,腳本文件或可操作程序的名稱。還有沒有辦法格式化這個評論文本?這看起來很糟糕。 – user2600210