【问题标题】:Merge/output Unique values of two CSVs using Powershell使用 Powershell 合并/输出两个 CSV 的唯一值
【发布时间】:2018-06-14 14:36:22
【问题描述】:

我正在尝试查找唯一值/合并两个 CSV。但这似乎不起作用。

由于某种原因,代码不返回唯一值(不合并)。输出始终是第一个 CSV 的值。在这种情况下,它返回 $Users1 的值。如果我将其更改为 $UserUnique = $Users2 + $user1,它将返回 $User2 的值

这是我的代码:

$Users1 = Import-Csv -Path \\share\user\Desktop\disabledusers.csv
$Users2 = Import-Csv -Path \\share\user\Desktop\disabledusers2.csv

$UserUnique = $Users1 + $user2
$UserUnique | Select-Object -Property * -Unique

有什么想法吗?

提前致谢。

我的参考链接 - How to merge two csv files in powershell with same headers and discard duplicate rows

根据要求提供更多信息:请在下面找到 CSV 文件和预期结果。

$Users1

名称 lastlogondate 密码lastset SAMAccountName 姓名1 20/03/2017 12:54 05/09/2013 13:43 Sam1 名称2 18/08/2016 10:31 04/03/2015 09:42 Sam2 名称3 11/09/2016 17:48 17/03/2015 12:02 Sam3 名称4 06/09/2016 08:46 06/10/2015 09:44 Sam4 名称5 07/09/2016 08:46 07/10/2015 09:44 Sam5 名称6 08/09/2016 08:46 08/10/2015 09:44 Sam6

$Uers2

名称 lastlogondate 密码lastset SAMAccountName 姓名1 20/03/2017 12:54 05/09/2013 13:43 Sam1 名称2 18/08/2016 10:31 04/03/2015 09:42 Sam2 名称3 11/09/2016 17:48 17/03/2015 12:02 Sam3 名称4 06/09/2016 08:46 06/10/2015 09:44 Sam4 名称7 09/09/2016 08:46 09/10/2015 09:44 Sam7 名称8 2016 年 10 月 9 日 08:46 2015 年 10 月 10 日 09:44 Sam8 名称9 2016 年 11 月 9 日 08:46 2015 年 11 月 10 日 09:44 Sam9 名称10 12/09/2016 08:46 12/10/2015 09:44 Sam10

预期结果

名称 lastlogondate 密码lastset SAMAccountName 姓名1 20/03/2017 12:54 05/09/2013 13:43 Sam1 名称2 18/08/2016 10:31 04/03/2015 09:42 Sam2 名称3 11/09/2016 17:48 17/03/2015 12:02 Sam3 名称4 06/09/2016 08:46 06/10/2015 09:44 Sam4 名称5 07/09/2016 08:46 07/10/2015 09:44 Sam5 名称6 08/09/2016 08:46 08/10/2015 09:44 Sam6 名称7 09/09/2016 08:46 09/10/2015 09:44 Sam7 名称8 2016 年 10 月 9 日 08:46 2015 年 10 月 10 日 09:44 Sam8 名称9 2016 年 11 月 9 日 08:46 2015 年 11 月 10 日 09:44 Sam9 名称10 12/09/2016 08:46 12/10/2015 09:44 Sam10

【问题讨论】:

  • 根据 mklement0,请参阅:stackoverflow.com/q/44428189/1701026。但是,如果您正在寻找一种在公共属性上加入表格的方法(请更清楚并显示使用csv 文件的一部分),您可能想尝试Join-Object 并执行类似$UserUnique = $Users1 | Join $Users2 -On 'User' 的操作(其中'User' 是公共属性名称)

标签: powershell powershell-3.0


【解决方案1】:

您的问题是简单的错字$user2 应该是 $users2

一个未定义的变量 - $user2,在这种情况下 - 默认为 $null,使预期的数组连接操作 $Users1 + $user2 成为无操作:实际上,您只得到 $Users1 ,这解释了您的症状(您尝试交换操作数 $Users2 + $user1,保留了错字)。

为防止出现此类拼写错误,使用Set-StrictMode -Version 1 或更高版本以使PowerShell 在访问未定义变量时报告错误"..." 内部除外)。 p>

不过,除此之外,我建议绕过 Import-Csv 和昂贵的 Select-Object -Property * 方法(有关解释,请参阅链接问题的 my answer),这既简化了您的代码,又提高了效率:

Get-Content \\share\user\Desktop\disabledusers.csv, \\share\user\Desktop\disabledusers2.csv |
  Select-Object -Unique

【讨论】:

  • 谢谢@mklement0。不敢相信我为一个错字写了一个完整的帖子。无论如何,感谢您指出并感谢有关 set-strictmode 的提示。我认为这会有所帮助
  • @Atheek:不用担心 - 许多其他人也没有发现它(我花了一段时间)。它确实强调了MCVE (Minimal, Complete, and Verifiable Example) 的重要性,但是:在构建它的过程中,您实际上可能会自己注意到这些拼写错误(或者至少您会让其他人更容易发现它们)。
猜你喜欢
  • 2022-11-02
  • 2013-01-11
  • 2021-03-03
  • 1970-01-01
  • 1970-01-01
  • 2017-06-15
  • 2017-12-18
  • 2017-10-25
  • 1970-01-01
相关资源
最近更新 更多