Windows PowerShell에서 파일을 한 줄씩 읽는 방법
-
Get-Content
와ForEach
루프를 사용하여 PowerShell에서 파일을 한 줄씩 읽기 -
Get-Content
와Foreach-Object
를 사용하여 PowerShell에서 파일을 한 줄씩 읽기 -
PowerShell에서
[System.IO.File]
클래스를 사용하여 파일을 한 줄씩 읽기 -
PowerShell에서
System.IO.StreamReader
클래스를 사용하여 파일을 한 줄씩 읽기 - 결론

Windows PowerShell에서는 Get-Content
cmdlet을 사용하여 파일에서 파일을 읽을 수 있습니다. 그러나 이 cmdlet은 파일의 전체 내용을 한 번에 메모리로 로드하므로 큰 파일에서는 실패하거나 멈출 수 있습니다.
이 문제를 해결하기 위해, 파일을 한 줄씩 읽을 수 있으며, 이 기사는 그 방법을 보여줄 것입니다.
시작하기 전에 여러 줄이 포함된 샘플 텍스트 파일을 만드는 것이 좋습니다. 예를 들어, 다음 줄이 포함된 file.txt
를 생성했습니다.
file.txt
:
one
two
three
four
five
six
seven
eight
nine
ten
Microsoft에 따르면 정규 표현식은 텍스트를 일치시키기 위해 사용되는 패턴입니다. 이것은 리터럴 문자, 연산자 및 기타 구조로 구성될 수 있습니다. 이 기사는 $regex
라는 표준 변수와 관련된 다양한 스크립트를 시도할 것입니다.
Get-Content
와 ForEach
루프를 사용하여 PowerShell에서 파일을 한 줄씩 읽기
우리는 처음에 Get-Content
cmdlet이 큰 파일을 로드할 때 결점이 있음을 논의했으며, 이 cmdlet은 파일의 내용을 한 번에 메모리로 로드합니다. 그러나 foreach
루프를 사용하여 라인을 하나씩 로드함으로써 개선할 수 있습니다.
예제 코드:
foreach ($line in Get-Content .\file.txt) {
if ($line -match $regex) {
Write-Output $line
}
}
프로세스에 대한 단계별 설명은 다음과 같습니다:
-
파일 내용 가져오기:
우리는
Get-Content
cmdlet을 사용하여 파일의 내용을 읽는 것으로 시작합니다.Get-Content .\file.txt
"file.txt"
를 파일 경로로 교체합니다. -
각 줄 반복 처리:
다음으로, 파일의 각 줄을 반복 처리하기 위해
ForEach
루프를 사용합니다. 루프는 각 줄을 하나씩 변수$line
에 할당합니다.루프 내에서는 필요에 따라 각 줄을 처리하는 코드를
Write-Host $line
대신 사용할 수 있습니다. 이 예에서는Write-Host
를 사용하여 각 줄을 단순히 표시하고 있지만, 원하는 작업을 수행할 수 있습니다.
Get-Content
와 Foreach-Object
를 사용하여 PowerShell에서 파일을 한 줄씩 읽기
PowerShell에서 Get-Content
와 Foreach-Object
를 사용하여 파일을 한 줄씩 읽으려면 다음 단계를 따르십시오:
-
Get-Content
cmdlet 사용:우리는
Get-Content
cmdlet을 사용하여 파일의 내용을 읽는 것으로 시작합니다.Get-Content
cmdlet은 파일의 각 줄을 읽고 파이프라인에서 객체로 출력합니다.powershellCopy codeGet-Content -Path "example.txt" | ForEach-Object { # Process each line here $_ # $_ represents the current line }
"example.txt"
를 파일 경로로 교체합니다.
-
Foreach-Object 루프:
다음으로, 우리는
Foreach-Object
cmdlet(%
는Foreach-Object
의 별칭임)을 사용하여 파이프라인에서 각 줄을 반복합니다. 스크립트 블록(코드가{}
안에 있음) 내에서$_
를 사용하여 현재 처리 중인 줄을 사용할 수 있습니다.powershellCopy codeGet-Content -Path "example.txt" | ForEach-Object { # Process each line here $_ # $_ represents the current line }
이 루프 내에서 각 줄에 대해 필요한 작업을 수행할 수 있습니다.
전체 작동 코드 예제
다음은 파일을 한 줄씩 읽고 각 줄을 표시하는 전체 작동 코드 예제입니다:
powershellCopy code# Specify the path to the file
$filePath = "example.txt"
# Check if the file exists
if (Test-Path $filePath) {
# Read the file line by line and process each line
Get-Content -Path $filePath | ForEach-Object {
# Process each line here
Write-Host $_
}
} else {
Write-Host "File not found: $filePath"
}
이 코드에서:
- 우리는
$filePath
변수를 사용하여 파일의 경로를 지정합니다. - 우리는
Test-Path
cmdlet을 사용하여 파일이 존재하는지 확인합니다. - 파일이 존재하는 경우, 우리는
Get-Content
를 사용하여 내용을 읽고Foreach-Object
에 전달하여 처리합니다. Foreach-Object
스크립트 블록 내에서 우리는Write-Host $_
를 사용하여 각 줄을 표시합니다.
PowerShell에서 [System.IO.File]
클래스를 사용하여 파일을 한 줄씩 읽기
PowerShell에서 [System.IO.File]
클래스를 사용하여 파일을 한 줄씩 읽으려면 다음 단계를 따르십시오:
-
파일 경로 지정:
읽고자 하는 파일의 경로를 지정하는 것으로 시작합니다.
"example.txt"
를 파일의 실제 경로로 교체합니다.powershellCopy code $filePath = "example.txt"
-
파일 존재 여부 확인:
파일을 읽기 전에
Test-Path
cmdlet을 사용하여 파일이 존재하는지 확인하는 것이 좋은 관행입니다:powershellCopy codeif (Test-Path $filePath) { # File exists, proceed with reading } else { Write-Host "File not found: $filePath" }
-
파일을 한 줄씩 읽기:
파일이 존재하는지 확인한 후,
[System.IO.File]
클래스를 사용하여 파일을 한 줄씩 읽을 수 있습니다. 그 코드입니다:powershellCopy codetry { $lines = [System.IO.File]::ReadLines($filePath) foreach ($line in $lines) { # Process each line here Write-Host $line } } catch { Write-Host "Error reading the file: $_" }
이 코드에서:
- 우리는
[System.IO.File]
클래스의ReadLines
메서드를 사용하여 파일을 한 줄씩 읽고,$lines
변수에 줄을 저장합니다. - 그런 다음
foreach
루프를 사용하여$lines
의 각 줄을 반복해서 처리합니다. 이 예에서는Write-Host
를 사용하여 각 줄을 단순히 표시하고 있지만, 원하는 작업을 수행할 수 있습니다.
- 우리는
전체 작동 코드 예제
다음은 파일을 한 줄씩 읽고 각 줄을 표시하는 전체 작동 코드 예제입니다:
powershellCopy code# Specify the path to the file
$filePath = "example.txt"
# Check if the file exists
if (Test-Path $filePath) {
try {
# Read the file line by line
$lines = [System.IO.File]::ReadLines($filePath)
foreach ($line in $lines) {
# Process each line here
Write-Host $line
}
} catch {
Write-Host "Error reading the file: $_"
}
} else {
Write-Host "File not found: $filePath"
}
이 코드에서:
- 우리는
$filePath
변수를 사용하여 파일의 경로를 지정합니다. - 우리는
Test-Path
를 사용하여 파일이 존재하는지 확인합니다. - 파일이 존재하는 경우, 우리는
[System.IO.File]::ReadLines()
메서드를 사용하여 파일을 한 줄씩 읽고foreach
루프를 사용하여 각 줄을 처리합니다. - 파일 읽기 중 발생할 수 있는 모든 예외를 포착하기 위해 오류 처리도 포함합니다.
PowerShell에서 System.IO.StreamReader
클래스를 사용하여 파일을 한 줄씩 읽기
PowerShell에서 System.IO.StreamReader
클래스를 사용하여 파일을 한 줄씩 읽으려면 다음 단계를 따르십시오:
-
파일 경로 지정:
읽고자 하는 파일의 경로를 지정하는 것으로 시작합니다.
"example.txt"
를 파일의 실제 경로로 교체합니다.powershellCopy code $filePath = "example.txt"
-
파일 존재 여부 확인:
파일을 읽기 전에
Test-Path
cmdlet을 사용하여 파일이 존재하는지 확인하는 것이 좋은 관행입니다:powershellCopy codeif (Test-Path $filePath) { # File exists, proceed with reading } else { Write-Host "File not found: $filePath" }
-
파일을 한 줄씩 읽기:
파일이 존재하는지 확인한 후,
System.IO.StreamReader
클래스를 사용하여 파일을 한 줄씩 읽을 수 있습니다. 그 코드입니다:
powershellCopy codetry {
$reader = [System.IO.StreamReader]::new($filePath)
while ($reader.Peek() -ge 0) {
$line = $reader.ReadLine()
# Process each line here
Write-Host $line
}
$reader.Close()
} catch {
Write-Host "Error reading the file: $_"
}
이 코드에서:
- 우리는
[System.IO.StreamReader]::new($filePath)
를 사용하여System.IO.StreamReader
의 새 인스턴스를 생성합니다. 여기서$filePath
는 파일의 경로입니다. - 우리는
while
루프를 사용하여 파일을 한 줄씩 읽습니다.$reader.Peek() -ge 0
조건은 파일 끝에 도달할 때까지 계속 읽도록 보장합니다. - 루프 내에서는
$reader.ReadLine()
을 사용하여 각 줄을 읽고 필요에 따라 처리합니다. 이 예에서는Write-Host
를 사용하여 각 줄을 단순히 표시하고 있지만, 원하는 작업을 수행할 수 있습니다. - 마지막으로, 파일 리소스를 해제하기 위해
$reader.Close()
를 사용하여StreamReader
를 닫습니다.
전체 작동 코드 예제
다음은 파일을 한 줄씩 읽고 각 줄을 표시하는 전체 작동 코드 예제입니다:
powershellCopy code# Specify the path to the file
$filePath = "example.txt"
# Check if the file exists
if (Test-Path $filePath) {
try {
# Create a StreamReader to read the file
$reader = [System.IO.StreamReader]::new($filePath)
# Read the file line by line
while ($reader.Peek() -ge 0) {
$line = $reader.ReadLine()
# Process each line here
Write-Host $line
}
# Close the StreamReader
$reader.Close()
} catch {
Write-Host "Error reading the file: $_"
}
} else {
Write-Host "File not found: $filePath"
}
이 코드에서:
- 우리는
$filePath
변수를 사용하여 파일의 경로를 지정합니다. - 우리는
Test-Path
를 사용하여 파일이 존재하는지 확인합니다. - 파일이 존재하는 경우, 우리는
System.IO.StreamReader
인스턴스를 생성하여 파일을 한 줄씩 읽고while
루프를 사용하여 각 줄을 처리합니다. - 파일 읽기 중 발생할 수 있는 모든 예외를 포착하기 위해 오류 처리도 포함합니다.
결론
요약하자면, PowerShell은 파일을 한 줄씩 읽기 위한 여러 가지 다양한 방법을 제공하여 다양한 스크립팅 및 자동화 필요를 충족합니다. Get-Content
와 ForEach
루프는 단순하고 읽기 쉬운 작업에 적합한 사용자 친화적인 선택입니다. Get-Content
와 Foreach-Object
는 유연성을 높여주어 파이프라인 내에서 더 복잡한 작업 및 필터링 작업에 적합합니다.
더 높은 제어와 포괄적인 오류 처리가 필요한 시나리오에서는 [System.IO.File]
클래스가 강력한 솔루션을 제공합니다. 이 방법은 파일 작업을 세밀하게 조정하고 예외를 우아하게 처리할 수 있게 하여 견고하고 오류 저항성이 높은 스크립트에 적합합니다.
큰 파일을 다루고 메모리 효율성이 중요한 상황에서는 System.IO.StreamReader
클래스가 돋보입니다. 이 클래스는 파일을 효율적으로 읽을 수 있게 하여 메모리 리소스를 보다 효과적으로 관리하므로 대규모 데이터 세트를 원활하게 처리할 수 있습니다.
궁극적으로, 어떤 방법을 선택하는지는 특정 스크립트 요구 사항, 파일 크기 및 처리의 복잡성에 따라 달라집니다. 이러한 방법을 활용함으로써 PowerShell에서 파일을 자신 있게 한 줄씩 읽을 수 있으며, 자동화 작업 흐름에서 다양한 파일 관련 작업을 효과적으로 처리할 수 있습니다.
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn