我有两个CSV文件,两个都有2个公共列(计算机名和日期)。 一个CSV文件有5列,第二个CSV有22列。
我想将两个列数据(计算机名称和日期)与第二个CSV文件进行比较,如果匹配,则在CSV 1(5列)中再添加一列,并插入来自不同列的数据。
第一个csv数据
Computer Name Creation time
12301825 9/1/2013 1:23
23304825 8/1/2013 1:23
43307825 6/1/2013 1:23
53308825 9/1/2013 1:23
63305825 5/1/2013 1:45
73305825 9/1/2013 1:45
第二个csv数据
Computer Name Creation time Value
12301825 9/1/2013 1:23 2
27704825 8/1/2013 1:23 3
43307825 6/1/2013 1:23 4
53308825 9/1/2013 1:23 5
63305825 5/1/2013 1:45 9
73305825 9/1/2013 1:45 7
我想比较两个csv文件中的列,如果值匹配,则比较第一个csv文件中的合并值列。
我尝试开始创建脚本,但我不知道如何在powershell中完成。
$alert=Import-Csv -Path ".\alert.csv" -Header "Computer Name" | Sort-object Property "Computer Name" -Unique
$threat = Import-Csv ".\threat.csv" -Header "Computer Name" |Sort-Object -Property "Computer Name" -Unique
Compare-Object $alert $threat -Property "Computer Name" | Where-Object{$_.SideIndicator -eq '=>'} |
Select-Object "Computer Name" | export-csv .\Difference.csv -NoTypeInfo
这不是我想要创建的脚本,因为它与我的要求无关。
alert.csv包含22列,threat.csv包含5列。我想将threat.csv与alert.csv进行比较。
当我在脚本下面运行时,我得到这样的输出文件。
$alert=Import-Csv -Path "d:\ps\alert.csv"
$threat = Import-Csv -Path "d:\ps\threat.csv"
ForEach($Record in $threat){
$MatchedValue = (Compare-Object $alert $Record -Property "Computer Name","Creation time" -IncludeEqual -ExcludeDifferent -PassThru).value
$Record = Add-Member -InputObject $Record -Type NoteProperty -Name "Values" -Value $MathedValue
}
$threat|Export-Csv "d:\ps\threatss.csv" -NoTypeInformation
文件数据输出
PK!?z?b??[Content_Types].xml ??(??T?N?0?#???(q?!?G?|??7?U?????=??V?J???$?????{2?4.[CB|)??Hd?u0?/J?????Iy?\?P?-??M//&o????R?D?NJ?54 Values
"???*?F???J/???ht#u??rj1?t???5??U?g?0??8I??s\0???????*Fg?""V.???a?CUY
&?U?\Ev?? ???d*? ???W?;????Q??az?8<n?o3?????F`?n???!"
????[=?
&$???W?4?K??H"?xR??d?????N?9????Aw(7ey/???O??
???h?????m?|
?}D?g"$?4??F?Y??.2#???5?9????Y]b??d??@??%?s?"??0?tB??)???[??????????PK!?p??Hxl/workbook.xml?Q?N?0?#????I????TB??!Q??7?U?l????U
答案 0 :(得分:3)
我认为你可能会让事情变得复杂。试试这个:
$alert=Import-Csv -Path ".\alert.csv"
$threat = Import-Csv ".\threat.csv"
ForEach($Record in $alert){
$MatchedValue = (Compare-Object $threat $Record -Property "Computer Name","Creation time" -IncludeEqual -ExcludeDifferent -PassThru).value
$Record = Add-Member -InputObject $Record -Type NoteProperty -Name "Value" -Value $MatchedValue
}
$alert|Export-Csv ".\Combined.csv" -NoTypeInformation
单步执行此操作,它首先将alert.csv导入$ alert数据集。然后对threat.csv和$ threat做同样的事情。然后逐步浏览$ alert数据集中的每条记录,并在$ threat中查找匹配的记录,其中计算机名称和创建时间相等。它从$ threat中的匹配记录中保存Value字段,将该值(如果有的话)添加到$ alert中的当前记录,然后转到$ alert中的下一条记录。解析$ alert中的所有记录后,它会将组合数据集导出到Combined.csv。
如果您有任何问题或疑问,请与我们联系。