You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将PowerShell中$d1与$d2变量的列合并输出?

PowerShell合并两个CSV并保留所有列的解决方法

场景1:两个CSV存在关联键(如UID与Email用户标识匹配)

如果两个数据集有可匹配的关联字段(比如$d1的UID对应$d2中Email的前缀,或是$d2也包含UID列),可以用以下方式合并:

方式1:手动遍历匹配(无需额外模块)

# 假设$d1的UID是$d2中Email的用户名前缀(如UID=zhangsan,Email=zhangsan@xxx.com)
$d1 | ForEach-Object {
    $currentUid = $_.UID
    $matchRow = $d2 | Where-Object { $_.Email -like "$currentUid@*" }
    # 构造合并后的对象,无匹配项则对应列留空
    [PSCustomObject]@{
        UID    = $currentUid
        HDate  = $_.HDate
        Email  = $matchRow.Email ?? $null
        Office = $matchRow.Office ?? $null
    }
} | Export-Csv -Path "合并结果.csv" -NoTypeInformation

方式2:用Join-Object模块(适合复杂关联)

# 先安装模块(仅第一次需要)
Install-Module -Name JoinModule -Scope CurrentUser -Force
# 按UID字段内连接合并,保留所有列
$d1 | Join-Object -JoinType Inner -With $d2 -On UID | Export-Csv -Path "合并结果.csv" -NoTypeInformation

场景2:按行索引一对一合并(无关联键,仅按行顺序匹配)

如果两个CSV行数一致,且只需按行顺序一一对应合并:

for ($i = 0; $i -lt $d1.Count; $i++) {
    [PSCustomObject]@{
        UID    = $d1[$i].UID
        HDate  = $d1[$i].HDate
        Email  = if ($i -lt $d2.Count) { $d2[$i].Email } else { $null }
        Office = if ($i -lt $d2.Count) { $d2[$i].Office } else { $null }
    }
} | Export-Csv -Path "按行合并结果.csv" -NoTypeInformation

注意事项

  • 使用Export-Csv时,-NoTypeInformation参数可避免生成冗余的类型信息行
  • 若两个CSV行数不一致,按行合并时超出部分的列会填充$null
  • 关联键匹配时,需确保匹配规则符合实际数据格式(如区分大小写、是否包含特殊字符)

内容的提问来源于stack exchange,提问作者CuriousCoder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 05:45:22