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

如何用Windows PowerShell在TSV文件中替换Manager字段为匹配的Primary Email

PowerShell替换TSV中Manager字段为对应邮箱的解决方案

假设你的TSV文件包含员工ID、Manager(存储员工ID)、Primary Email等表头字段,以下是两种常见场景的解决脚本:

场景1:所有数据在同一个TSV文件中

脚本逻辑:先把文件内容读入内存,构建ID到Primary Email的映射表,再遍历每条记录替换Manager字段。

# 替换为你的实际文件路径
$inputFile = "C:\data\employees.tsv"
$outputFile = "C:\data\employees_updated.tsv"

# 读取带表头的TSV文件
$empList = Import-Csv -Path $inputFile -Delimiter "`t"

# 构建ID与邮箱的映射哈希表(提高查询效率)
$emailLookup = @{}
foreach ($emp in $empList) {
    $emailLookup[$emp.ID] = $emp.'Primary Email'
}

# 遍历替换Manager字段
foreach ($emp in $empList) {
    # 找到匹配的邮箱就替换,找不到则保留原Manager值
    if ($emailLookup.ContainsKey($emp.Manager)) {
        $emp.Manager = $emailLookup[$emp.Manager]
    }
    # 可选:如果想把无匹配的Manager设为空,替换成下面这行
    # $emp.Manager = $emailLookup[$emp.Manager] ?? ""
}

# 导出处理后的TSV(-NoTypeInformation避免生成多余类型头)
$empList | Export-Csv -Path $outputFile -Delimiter "`t" -NoTypeInformation -Encoding UTF8

场景2:Manager与邮箱的映射在单独的TSV文件中

如果员工主数据和ID-邮箱映射表是两个分开的文件,用以下脚本:

$mainDataFile = "C:\data\main_employees.tsv"
$managerMapFile = "C:\data\manager_email_map.tsv"
$outputFile = "C:\data\main_employees_updated.tsv"

# 先读取映射表构建哈希表
$emailLookup = @{}
Import-Csv -Path $managerMapFile -Delimiter "`t" | ForEach-Object {
    $emailLookup[$_.ID] = $_.PrimaryEmail
}

# 处理主数据文件
$mainData = Import-Csv -Path $mainDataFile -Delimiter "`t"
foreach ($item in $mainData) {
    if ($emailLookup.ContainsKey($item.Manager)) {
        $item.Manager = $emailLookup[$item.Manager]
    }
}

# 导出结果
$mainData | Export-Csv -Path $outputFile -Delimiter "`t" -NoTypeInformation -Encoding UTF8

注意事项

  • 确保脚本中的列名(如ID、Manager、Primary Email)与你的TSV表头完全一致,大小写敏感。
  • 导出时指定-Encoding UTF8避免中文乱码问题。
  • 不要直接覆盖原文件,建议输出到新文件验证无误后再替换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 12:52:34