【问题标题】:Powershell script to compare csv比较csv的Powershell脚本
【发布时间】:2019-02-21 13:23:58
【问题描述】:

我有几个 csv excel 表,看起来像这样

编者注:如果您有 csv,请发布该 csv 的文本表示形式!

> 获取内容 .\Sheet1.csv 姓名年龄 泽维尔,20 利亚姆,19 莉西,21 > 获取内容 .\Sheet2.csv 姓名年龄 利亚姆,19 莉西,21 弗兰克,25

有人可以帮我让它工作并得到一个 csv。

我正在尝试比较从 csv 1 到 csv2 的列“名称”值:

  • 如果有匹配项,我想将值存储在名为array 1 的数组中,最后将其导出到 csv。例如 -Liam 和 Lisy
  • 如果它们不匹配我想将值存储在array 2 上,最后将其导出到 csv。例如 - 泽维尔

我的代码:

$source = Import-Csv C:\output\Source.csv 
$target = Import-Csv C:\output\Target.csv
Creating array to store vales
$match = New-Object System.Collections.ArrayList
$donotmatch = New-Object System.Collections.ArrayList
Comparing column values  
foreach ($i in $source) {
    foreach ($s in $i.name) {
        foreach ($t in $target) {
            if ($n -eq $t.name) {
                $match.Add($n)
            }
            else
            {
                $donotmatch.Add($n)
            }
        }
    }
}
$match.ToArray()
$donotmatch.ToArray()

【问题讨论】:

标签: powershell csv


【解决方案1】:

这个脚本:

$Sheet1 = Import-Csv .\Sheet1.csv
$Sheet2 = Import-Csv .\Sheet2.csv

Compare-Object $Sheet1 $Sheet2 -Property Name -PassThru |
    Select-Object * -ExcludeProperty SideIndicator | 
        Export-Csv Different.csv -NoTypeInformation

Compare-Object $Sheet1 $Sheet2  -Property Name -PassThru -IncludeEqual -ExcludeDifferent |
    Select-Object * -ExcludeProperty SideIndicator | 
        Export-Csv Equal.csv -NoTypeInformation

将产生这两个文件:

> Get-Content .\Equal.csv
"Name","Age"
"Liam","19"
"Lisy","21"

> Get-Content .\Different.csv
"Name","Age"
"Frank","25"
"Xavier","20"

【讨论】:

  • 谢谢我尝试了脚本,当 csv 只有一列名为 Name 时,它​​可以正常工作。但是,当有两列时,当 Liam 和 Lisy 在第一个 csv 上的年龄相同时 21 岁,而 Frank 和 Xavier 的年龄相同时 22 岁,那么它会给出非常不同的结果,你能在这里帮助我吗?
  • 我听不懂,您的脚本比较 name 属性,我的也是。如果还想比较年龄,改成Compare-Object $Sheet1 $Sheet2 -Property Name,Age ...
猜你喜欢
  • 2019-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-26
相关资源
最近更新 更多