PowerShell脚本比较两个文件并将输出合并到第三个文件



我有2个文件,我需要与PowerShell进行比较,并生成第三个文件,合并输出包含file1.txtfile2.txt的所有行。

这是file1.txtfile2.txt的一个例子:

中内容
"Name","RcopyGroup","State","Type","Prov","UsrCPG","VSize_MB","Usr_Rsvd_MB","Usr_Used_Perc","Usr_Used_MB","Snp_Rsvd_MB","Snp_Used_Perc"
".srdata","-","normal","base","full","-","81920","81920","100.0","81920","0","0.0"
"admin","-","normal","base","full","-","12288","12288","100.0","12288","0","0.0"
"LUN1","-","normal","base","tpvv","SSD_CPG","1331200","1159552","85.6","1139240","17408","0.0"
"LUN2","-","normal","base","tpvv","FC_CPG","122880","82944","52.3","64304","17408","0.0"
"LUN3","-","normal","base","tpvv","SSD_CPG","71680","56320","73.7","52861","1024","0.0"
"LUN4","-","normal","base","tpvv","FC_CPG","40960","33792","77.9","31922","1024","0.0"
"LUN5","-","normal","base","tpvv","FC_CPG","10240","11264","99.7","10209","1024","0.0"

File2.txt内容

"Name","LunID","PresentTo","vvWWN"
"LUN1","10","Host1","60002AC0000000000000004400015537"
"LUN1","10","Host3","60002AC0000000000000004400015537"
"LUN1","110","Host2","60002AC0000000000000004400015537"
"LUN1","209","Host5","60002AC0000000000000004400015537"
"LUN1","110","Host4","60002AC0000000000000004400015537"
"LUN2","111","Host2","60002AC000000000080019FC000153AF"
"LUN3","110","Host2","60002AC000000000080019FD000153AF"
"LUN4","210","Host2","60002AC0000000000A004BC500015537"
"LUN5","211","Host2","60002AC0000000000A004BC700015537"
"LUN4","210","Host5","60002AC0000000000A004BC500015537"
"LUN5","211","Host5","60002AC0000000000A004BC700015537"

,我希望file3.txt的输出像这样

"Name","RcopyGroup","State","Type","Prov","UsrCPG","VSize_MB","Usr_Rsvd_MB","Usr_Used_Perc","Usr_Used_MB","Snp_Rsvd_MB","Snp_Used_Perc","PresentTo"
".srdata","-","normal","base","full","-","81920","81920","100.0","81920","0","0.0",""
"admin","-","normal","base","full","-","12288","12288","100.0","12288","0","0.0",""
"LUN1","-","normal","base","tpvv","SSD_CPG","1331200","1159552","85.6","1139240","17408","0.0","Host1;Host3;Host2;Host5;Host4"
"LUN2","-","normal","base","tpvv","FC_CPG","122880","82944","52.3","64304","17408","0.0","Host2"
"LUN3","-","normal","base","tpvv","SSD_CPG","71680","56320","73.7","52861","1024","0.0","Host2"
"LUN4","-","normal","base","tpvv","FC_CPG","40960","33792","77.9","31922","1024","0.0","Host2;Host5"
"LUN5","-","normal","base","tpvv","FC_CPG","10240","11264","99.7","10209","1024","0.0","Host2;Host5"

我检查了类似的帖子在论坛Powershell比较两个文件,并生成第三个文件但它并没有产生我所需要的结果。有谁能帮我想个办法吗?

谢谢。

您可以使用Group-Objectcmdlet计算出每个名称的主机,然后向file1中的每个新对象添加一个新属性,并使用-join ";"将分组数据连接起来。

$file1 = Import-Csv .file1.csv
$file2 = Import-Csv .file2.csv
# Group file2 by Name and output as a hashtable 
$group2 = $file2 | Select-Object Name, PresentTo | Group-Object -Property Name -AsHashTable
$file1 | ForEach-Object {
# Add the new property (column) 'PresentTo' with the matching file2 Hosts joined by ';'
$_ | Add-Member -NotePropertyName PresentTo -NotePropertyValue ($group2.($_.Name).PresentTo -join ';') -PassThru
} | Export-Csv .file3.csv
# have a look at our new file
Import-Csv .file3.csv | Format-Table *

输出
Name    RcopyGroup State  Type Prov UsrCPG  VSize_MB Usr_Rsvd_MB Usr_Used_Perc Usr_Used_MB Snp_Rsvd_MB Snp_Used_Perc PresentTo
----    ---------- -----  ---- ---- ------  -------- ----------- ------------- ----------- ----------- ------------- ---------
.srdata -          normal base full -       81920    81920       100.0         81920       0           0.0
admin   -          normal base full -       12288    12288       100.0         12288       0           0.0
LUN1    -          normal base tpvv SSD_CPG 1331200  1159552     85.6          1139240     17408       0.0           Host1;Host3;Host2;Host5;Host4
LUN2    -          normal base tpvv FC_CPG  122880   82944       52.3          64304       17408       0.0           Host2
LUN3    -          normal base tpvv SSD_CPG 71680    56320       73.7          52861       1024        0.0           Host2
LUN4    -          normal base tpvv FC_CPG  40960    33792       77.9          31922       1024        0.0           Host2;Host5
LUN5    -          normal base tpvv FC_CPG  10240    11264       99.7          10209       1024        0.0           Host2;Host5

最新更新