比较 2 个 CSV 文件并写下所有差异

2023-12-10

我有 3 个包含用户信息的 CSV 文件。 CSV1 是所有非活动用户的“主”列表。 CSV2 是需要停用的当前用户列表,CSV3 是需要激活的用户列表。

我想要的是有一个可以从另一个脚本(创建 CSV2/3 的脚本)调用的 PowerShell 脚本,以使其比较 CSV1/2 并将所有唯一记录写回 CSV1。然后我希望它比较 CSV1/3 并删除 CSV1 中存在于 CSV3 中的所有记录。 CSV2/3 每天都会发生变化,并且除了标题之外,其中可能没有任何数据。

有几个独特的字段,但我想比较“EmployeeID”。 所有 3 个 CSV 文件都有标题(所有文件的标题相同,因此数据一致)。

到目前为止,我最终的结果是将记录从 CSV2 添加到 CSV1,但它添加了两个标头。

$ICM= Import-Csv inactiveicmaster.csv -Header 'StudentDistrictID', 'StudentSiteCode', 'StudentLastName', 'StudentFirstName', 'StudentGradeLevel', 'GraduationYr', 'Masterck', 'Homeroom', 'MiddleName', 'Birthday', 'Gender', 'Email'
$IC = Import-Csv csv\inactiveic.csv -Header 'StudentDistrictID', 'StudentSiteCode', 'StudentLastName', 'StudentFirstName', 'StudentGradeLevel', 'GraduationYr', 'Masterck', 'Homeroom', 'MiddleName', 'Birthday', 'Gender', 'Email'
$DIS = Import-Csv csv\disinad.csv -Header 'StudentDistrictID', 'StudentSiteCode', 'StudentLastName', 'StudentFirstName', 'StudentGradeLevel', 'GraduationYr', 'Masterck', 'Homeroom', 'MiddleName', 'Birthday', 'Gender', 'Email'
foreach ($f in $ic) {
  $found = $false
  foreach ($g in $icm) {
    if ($g.StudentDistrictID -eq $f.StudentDistrictID) {
      $found = $true
    }
  }
  if ($found -eq $false) {
    $icm += $f
    if ($f.masterck -eq "") {
      $f.masterck = "IM"
    }
  }
}
<#
foreach ($h in $dis) {
  $found = $false
  foreach ($g in $icm) {
    if ($g.studentdistrictid -eq $h.studentdistrictid) {
      $found = $true
    }
    if ($found -ne $false) {
      #don't know what to do here to remove the duplicate
    }
  }
}
#>
$icm | select * | Export-Csv master.csv -NoTypeInformation

我不知道确切的答案,但你不能做这样的事情吗?

$file1 = import-csv -Path "C:\temp\Test1.csv" 
$file2 = import-csv -Path "C:\temp\Test2.csv" 
Compare-Object $file1 $file2 -property MPFriendlyName

查看此链接以获取完整的示例和结果:比较具有相同标题的 csv

如果您知道差异,那么将它们写入其他 csv 中就很容易了。

编辑: 我对比较对象没有太多经验,但由于它是 csv,因此您可以删除该列。

Import-Csv C:\fso\csv1.csv | select ColumnYouWant1,ColumnYouWant2| Export-Csv -Path c:\fso\csvResult.csv –NoTypeInformation

此命令将读取您最后的 csv 并选择您想要保留的列并将其导出到新的 csv。

添加一个远程项目命令来删除您不再需要的任何 csv,然后就完成了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

比较 2 个 CSV 文件并写下所有差异 的相关文章

随机推荐

  • 无法让 Twitter OAuth 回调身份验证在 Cocoa 应用程序中工作

    我正在使用 MGTwitterEngine 和 OAuthConsumer 框架 并且主要遵循以下说明使用OAuth消费者 为了使用 OAuth 并且不让用户处理基于 oob PIN 的身份验证 您需要启用对应用程序的回调 要在桌面 或 i
  • 如何识别窗口服务中的登录事件

    我有一个 Windows 服务 可以获取用户详细信息并将结果保存到日志文本文件中 而且 我的问题是当我注销系统并再次登录时 即无需重新启动机器 我还想将登录系统的时间节省到该日志文件中 如何在窗口服务中编写登录事件 请帮助评论 我使用了下面
  • 在 Tornado 中“超时”请求的正确方法

    我设法编写了一个相当愚蠢的错误 该错误将使我的一个请求处理程序运行非常慢的数据库查询 有趣的是 我注意到即使在围攻完成很久之后 Tornado 仍然在不断地处理请求 有时是 90 年代后 评论 gt 我不是 100 确定 Siege 的工作
  • 在另一个线程中创建 WPF 元素

    我可以在不同的线程上运行 2 个或更多 WPF 窗口 问题是现在我的应用程序分割在许多窗口中 我真正想要的是有一个主窗口包含一个网格 其中每个单元格都包含由不同线程管理的元素 是否可以创建一个由不是管理父窗口 包含窗口的线程管理的 UIEl
  • 按键升序对数组进行排序,并将“粘性”键指定为第一个

    我有一个多维数组 array array B gt array Banana Yello O gt array Orange Orange A gt array Apple Green S gt array Strawberry Red o
  • 在有内容的页面上触发文件下载

    我见过许多网站在包含现有 HTML 内容的页面上触发文件另存为对话框 他们如何做到这一点 我知道如何设置正确的标题 例如内容处置等 但是当我这样做时 页面的内容不会加载 并且立即触发文件下载 创建一个常规 HTML 页面 然后添加一个 ME
  • JavaScript:使值对数组形成值数组

    有没有一种优雅 实用的方法来转换这个数组 1 5 9 21 进入这个 1 5 5 9 9 21 我知道我可以forEach数组并收集值以创建一个新数组 有没有一种优雅的方式来做到这一点 lodash不使用forEach 您可以映射一个拼接数
  • 向JTable添加加载循环

    我有一个从数据库加载数据的 JTable 因为有时数据太多 我想在Jtable内添加一个加载圆圈来通知用户数据正在加载 这是我希望的图像 这可能吗 在 Swing 中如何实现呢 PS 我不想使用进度条 我只想使用表格内的圆圈 UPDATE
  • 为什么在 LIKE 过滤器中使用下划线字符会给出所有结果?

    我写了下面的 SQL 查询LIKE健康 状况 SELECT FROM Manager WHERE managerid LIKE AND managername LIKE In the LIKE我想搜索任何下划线 但我知道我的列数据没有下划线
  • 使行延伸到 CSS 网格中的所有列

    尽管我已经指定了我希望导航延伸到哪些列 但我一直无法让我的导航完全延伸到我的列上 如果您可以看一下我的代码并指出我的错误太棒了 这是浏览器中 HTML 文件的图像 body margin 0 padding 0 container max
  • 将 datetimepicker 连接到 angularjs

    我需要使用 Angular Bootstrap 创建一个包含日期和时间的输入字段 我找到了这个日期时间选择器它看起来正是我需要的 一个字段中的日期和时间 并阻止用户错误的版本 我写了一个指令 datepickers 启动了 但它改变了视图
  • 为什么分配给 True/False 不能按我的预期工作?

    作为回答另一个问题的一部分 我编写了以下代码 乍一看其行为似乎很奇怪 print True outputs true True False print True outputs false True True print True outp
  • 谷歌地图反应没有出现

    我正在尝试使用google map react 但是当我尝试渲染它时 什么也没有出现 我错过了什么吗 import GoogleMap from google map react import React Component from re
  • 如何在Google App Engine中导入Google Cloud语音识别(python)

    我想在我的 Google App Engine python 应用程序上使用 google cloud 库 自从我在本地安装了这个库以来 我的所有测试都在我的本地工作 我原以为 GAE 默认支持它 但它是不支持 这是我得到的错误 from
  • 如何使用 Selenium RC 来验证我们的服务器端重定向(301、302)?

    我们的 Apache 配置中有很多重定向 我想用 Selenium 自动测试重定向 这导致我遇到了一些问题 调用 URL 但在重定向页面上断言 重定向后检查浏览器的URL 检查响应标头 以确定重定向类型 301 302 也许 Seleniu
  • 如何从一个类运行多个控制台?

    我有三个课程 它们都有不同的作品 但我需要一起运行它们 当我在一个类中运行所有这些时 我只得到一个控制台 并且无法更改此控制台 我想要的是在一个类中运行它们并查看每个控制台 我怎样才能做到这一点 更清楚地说 when I run first
  • 类型擦除的通用包装器是如何实现的?

    我需要为我自己的结构实现一个类型擦除包装器 非常类似于SequenceOf GeneratorOf等等 所以我开始尝试重新实现标准SequenceOf myself 我刚刚复制并粘贴了声明SequenceOf 将其重命名为MySequenc
  • 无法访问 Android 中的传感器

    我正在编写一个指南针应用程序 但由于某种原因无法访问所需的传感器 我已经实施了SensorEventListener以这种方式连接并注册我的传感器 sensorManager SensorManager getSystemService C
  • 为什么枚举已安装的 MSI 包如此慢?

    这是此的后续question 我使用这个稍微修改过的脚本来枚举所有已安装的 MSI 包 strComputer Set objWMIService GetObject winmgmts impersonationLevel imperson
  • 比较 2 个 CSV 文件并写下所有差异

    我有 3 个包含用户信息的 CSV 文件 CSV1 是所有非活动用户的 主 列表 CSV2 是需要停用的当前用户列表 CSV3 是需要激活的用户列表 我想要的是有一个可以从另一个脚本 创建 CSV2 3 的脚本 调用的 PowerShell