【发布时间】:2014-02-21 10:16:12
【问题描述】:
我有两个 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 列,Threats.csv 包含 5 列。我想将威胁.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
【问题讨论】:
标签: powershell csv