큰 CSV 파일을 작은 파일로 나누려 는 데이터의 예 입니다. 원본 파일 : 5,055,000 줄의 엑셀 데이터. 원하는 파일 : 파일 당 500,000 줄의 데이터. 그러나 어떤 일이 있어도 절대 해결할 수없는 두 가지 반복되는 오류가 있습니다.
내가하려는 것은 CSV 파일을 열고 최대 500,000 줄을 가져온 다음 즉시 일련의 새 CSV 파일로 내 보내서 500k마다 새 파일을 만드는 것입니다.
$sourceCSV = "E:\Data\032110-26AM.CSV"
$startrow = 0 ;
$counter = 1 ;
while ($startrow -lt5055000)
{
Import-CSV $sourceCSV | select-object -skip $startrow -first 500000 | Export-CSV "E:\Data\032110-26AM_SPLITFILE2$($counter).csv" -NoClobber;
$startrow += 500000 ;
$counter++ ;
}
코드가 내 파일을 통과하여 11 개의 작은 파일을 만들 것으로 예상했습니다. 그러나 다음과 같은 오류가 발생합니다.
At line:7 char:62
+ ... mport-CSV $sourceCSV | select-object -skip $startrow -first <500000> ...
+ ~
The '<' operator is reserved for future use.
다음은 루프 내에서 사용되는 숫자를 하드 코딩하지 않는 솔루션입니다. 500 줄의 CSV에서 테스트되었습니다. 파일 경로, 숫자 등에 맞게 조정하십시오.
$sourceCSV = "C:\scripts\test.csv"
$startrow = 0
$endrow = 500
$readcount = 50
$counter = 1
while ($startrow -lt $endrow)
{
Import-CSV $sourceCSV | Select-Object -Skip $startrow -First $readcount | Export-CSV $("C:\scripts\test_"+"$counter.csv") -NoClobber -NoTypeInformation
$startrow = $startrow + $readcount
$counter++
}
사용하는 데.가 필요할 수도 있고 필요하지 않을 수도 -NoTypeInformation
있지만 많은 도구가 맨 위에 추가 정보 줄이있는 형식을 인식하지 못하기 때문에 다른 PowerShell 스크립트가 아닌 다른 것에 결과를 제공하려는 경우 도움이 될 수 있습니다. .
우연히도 원본 "CSV"파일은 상단에 추가 줄이 추가되어 오염되었으므로 먼저 제거해야합니다. 여기에 내 원래 답변과 일치하는 방법이 있습니다. 또한 요청에 따라 예측할 수없는 파일 크기를 고려하기 위해 조정을 추가했습니다.
$initialsourceCSV = "C:\scripts\testwithjunk.csv"
$initialskip = 6
Get-Content $initialsourceCSV | Select-Object -Skip $initialskip | Out-File -FilePath "C:\scripts\temp.csv"
$sourceCSV = "C:\scripts\temp.csv"
$startrow = 0
$endrow = (get-content $sourceCSV).Length
$readcount = 50
$counter = 1
while ($startrow -lt $endrow)
{
Import-CSV $sourceCSV | Select-Object -Skip $startrow -First $readcount | Export-CSV $("C:\scripts\test_"+"$counter.csv") -NoClobber -NoTypeInformation
$startrow = $startrow + $readcount
$counter++
}
Remove-Item "C:\scripts\temp.csv"
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다