我在第11列中有一个csv,我想要替换它,然后将修改后的文件写入文件系统:
get-content .\BSEG_EXPORT.csv | % { $_.Split(",")[11] -replace "1", "@" } | out-file stuffs.csv
我希望stuffs.csv
拥有输入文件,但所有1
替换为@
第11列。但是,它仅包含第11列。
我怎么做错了?
答案 0 :(得分:0)
基本上,您的期望是不正确的。
get-content .\BSEG_EXPORT.csv | % { $_.Split(",")[11] -replace "1", "@" }
上面一行说:$_.Split(",")[11]
,这意味着获得第12列。无处选择所有列。从那里你正在进行替换,这就是你输出到输出文件的内容。在psuedo代码中,你已经说过“获取csv的内容。对于每一行,获取第12列,将”1“替换为”@“,输出替换值。”
你需要更多的东西:
get-content .\BSEG_EXPORT.csv | % { $sheet = $_.Split(","); $sheet[11] = $sheet[11] -replace "1", "@"; $_ } | out-file stuffs.csv
但是,如果您有任何带引号的字符串(例如1,2,“这是一个字符串,是的!”,四,5),您的Split
将无效。您应该调查命令Import-Csv
和Export-Csv
。这些将使您更好地控制输入和输出。
例如:
$sheet = Import-Csv .\BSEG_EXPORT.csv
foreach ($row in $sheet) {
$row.11thColumnName = $row.11thColumnName.Replace("1", "@")
}
$sheet | Export-Csv stuffs.csv