如果我理解正确,您有一个包含要替换的标题名称的 CSV。目前它们是X_X,您想用X X 替换它们。您可以使用Select-Object 和计算属性轻松完成此操作。现在,如果您有很多标题,那可能需要大量的手动工作。这是一种获取标头并动态构建计算属性的方法。
演示数据。
# first file
$csv = @"
User_Name,User_Age,First_Name,Last_Name
ab,20,a,b
cd,21,c,d
ef,22,e,f
"@ |ConvertFrom-Csv
# second file
$headers = @"
header
User Name
User Age
First Name
Last Name
"@ | ConvertFrom-Csv
构建计算属性
$SelectProps = @($headers | ForEach-Object {
@{n=$_.header;e={$($_.header.Replace('_',' '))}}
})
现在应该是这样的
Name Value
---- -----
n User Name
e User_Name
n User Age
e User_Age
n First Name
e First_Name
n Last Name
e Last_Name
现在我们只需替换它们。
$csv | Select-Object $SelectProps
User Name User Age First Name Last Name
--------- -------- ---------- ---------
ab 20 a b
cd 21 c d
ef 22 e f
编写代码
$csv = Import-Csv "final results.csv"
$headers = Import-Csv "header names.csv"
$SelectProps = @($headers | ForEach-Object {
@{n=$_.header;e=($_.header.Replace(' ','_'))}
})
$csv | Select-Object $SelectProps |
Export-Csv -Path "final results.csv" -NoTypeInformation
但您也可以将第一行替换为Get-Content、Set-Content 和-join
$headers = Import-Csv "header names.csv"
Set-Content -Value $(
$headers.header -join ','
Get-Content "final results.csv" | Select-Object -Skip 1
) "final results.csv"
Import-Csv "final results.csv"
User Name User Age First Name Last Name
--------- -------- ---------- ---------
ab 20 a b
cd 21 c d
ef 22 e f