bestsource

PowerShell: csv 파일에서 행 수를 계산하는 방법은 무엇입니까?

bestsource 2023. 8. 17. 21:34
반응형

PowerShell: csv 파일에서 행 수를 계산하는 방법은 무엇입니까?

파워셸을 사용하여 CSV 파일의 행 수를 계산하려면 어떻게 해야 합니까?저는 이런 것을 시도했습니다.

Get-Content -length "C:\Directory\file.csv"

또는

(Get-Content).length "C:\Directory\file.csv"

하지만 이것들은 오류를 초래합니다.

Get-Content 및 Measure-Object는 작은 파일에는 문제가 없지만 메모리에서는 둘 다 매우 비효율적입니다.대용량 파일에 정말 문제가 있었습니다.

두 가지 방법 중 하나를 사용하여 1GB 파일의 행 수를 셀 때 Powershell은 서버의 사용 가능한 모든 메모리(8GB)를 게걸스럽게 먹어치운 다음 디스크에 페이징을 시작했습니다.한 시간 넘게 놔뒀는데도 여전히 디스크 호출 중이어서 죽였습니다.

대용량 파일을 위한 가장 좋은 방법은 IO를 사용하는 것입니다.StreamReader는 디스크에서 파일을 로드하고 변수를 사용하여 각 행을 카운트합니다.이를 통해 메모리 사용량을 매우 합리적인 25MB로 줄일 수 있으며, 1GB 파일의 행 수를 계산하는 데 약 30초, 6GB 파일의 경우 몇 분이 소요되어 훨씬 더 빠릅니다.파일 크기에 관계없이 RAM을 과도하게 소모하지 않습니다.

[int]$LinesInFile = 0
$reader = New-Object IO.StreamReader 'c:\filename.csv'
 while($reader.ReadLine() -ne $null){ $LinesInFile++ }

위의 스니펫은 get-content 또는 measure-object를 사용하는 모든 곳에 삽입할 수 있습니다. $Lines를 참조하십시오.파일의 행 수를 가져오는 InFile 변수입니다.

파이프로 연결합니다.Measure-Objectcmdlet

Import-Csv C:\Directory\file.csv | Measure-Object

일반적으로 (csv 여부)

@(Get-Content c:\file.csv).Length

파일에 줄이 하나만 있으면 실패합니다. (@ 접두사가 필요합니다.).filename 파일에 한 줄이 있는 경우 해당 줄의 문자 수만 계산합니다.

Get-Content c:\file.csv | Measure-Object -line

그러나 레코드가 하나 이상의 행을 차지하는 경우 둘 다 실패합니다.그런 다음 csv를 가져와 측정하는 것이 좋습니다.

Import-Csv c:\file.csv | Measure-Object | Select-Object -expand count

파워셸에서 unix like command를 간단하게 사용할 수 있습니다.

test.csv를 파일로 저장하면 행 수를 가져오는 명령은

gc test.csv | Measure-Object

시도해 보세요

(Import-Csv C:\Directory\file.csv).count

또는

$a=Import-Csv C:\Directory\file.csv
$a.count

(Import-Csv C:\Directory\file.csv).count이 중에서 유일하게 정확한 것입니다.

4781행의 csv에서 다른 모든 제안을 시도해 보았는데, 이 제안을 제외한 나머지 제안은 4803이 반환되었습니다.

언급URL : https://stackoverflow.com/questions/6855814/powershell-how-to-count-number-of-rows-in-csv-file

반응형