我需要读取CSV文件并查找仅替换文件第一行中的某些字符。我使用了foreach-object但是这会处理整个文件。关于如何最好地实现这一点的任何想法。
以下是代码:
Get-Content c:\output.csv | ForEach-Object { $_ -replace "objectGUID", 'StudentID' } | Set-Content c:\output2.csv
答案 0 :(得分:0)
好的,如果您只想更改文本文件的第一行,Get-Content就足够简单了。
GC c:\output.csv|select -first 1|%{$_ -replace "objectGUID", 'StudentID'}|Out-File C:\Output2.csv
GC C:\output.csv -readcount 1000|Select -skip 1|Out-File C:\Output2.csv -Append
这将仅拉出第一行,替换您想要的文本并将其写入新文件(假设您还没有Output2.csv文件)。之后,它会读取跳过第一行的文件的其余部分,并将其添加到同一文件中。您可以在此之后删除原始文件,并在您认为需要时重命名输出文件。
答案 1 :(得分:0)
这不会解决必须处理整个文件的问题,但如果它是一个非常大的文件,则应该大大减少执行该文件所需的时间。
$Updated = $false
Get-Content c:\output.csv -ReadCount 1000 |
ForEach-Object {
if ($Updated)
{
$_ | Add-Content c:\output2.csv
}
else {
$_[0] = $_[0] -replace "objectGUID", 'StudentID'
$_ | Set-Content c:\output2.csv
$Updated = $true
}
}
编辑:如果它只有3000行,那就足够了:
$FileContent = Get-Content c:\output.csv
$FileContent[0] = $FileContent[0] -replace 'objectGUID', 'StudentID'
$FileContent | Set-Content c:\output2.csv