PowerShell(파워쉘) 파일 내용 한 줄씩 읽기 (Feat. head & tail)
Read PowerShell file contents line by line (Feat. head & tail)
에이전트에서 로그 파일을 모니터링하는 기능을 추가하던 중
날짜(타임스탬프)가 같이 찍히지 않는 로그에
로그가 찍힌 시점에 날짜(타임스탬프)를 수동으로 찍어내기 위한 방법으로 사용하였습니다.
파워쉘에서 파일 내용이 여러 줄 일 때 한 줄씩 읽어와 변수에 저장하고 출력하는 방법에 대해 알아보겠습니다.
저는 한 줄씩 읽어서 원하는 값을 찾기 OR 추가,
다른 내용과 조합하여 새로운 형태의 내용을 만들어내는데 유용하게 사용하고 있습니다.
1. 파일 윗 줄부터 출력하기(리눅스 head 기능)
Get-Content로 파일을 읽고 파이프( ' | ' )를 통해 명령을 이어줍니다.
Select-Object 명령에서 -first 옵션을 주고 원하는 라인 개수 를 입력하면 됩니다.
1은 위부터 1줄, 2는 위부터 2줄이 출력됩니다.
5줄이 존재하는 logFile에서 맨 위 첫 줄만 출력해보겠습니다.
명령어:
Get-Content .\logFile.txt | Select-Object -first 1
2. 파일 아랫 줄부터 출력하기(리눅스 tail 기능)
Get-Content로 파일을 읽고 -Tail 옵션으로 원하는 라인 개수를 입력해 출력합니다.
1은 아래부터 1줄, 2는 아래부터 2줄이 출력됩니다.
5줄이 존재하는 logFile에서 마지막 줄만 출력해 보겠습니다.
명령어:
Get-Content .\logFile.txt -Tail 1
3. 파일 내용한 줄씩 읽고 출력하기
핵심은 Select-Object 명령에서 -Skip -first 두 가지 옵션을 같이 사용하는 것입니다.
즉, 5줄이 있으면 -Skip 옵션에 있는 숫자에 따라 내용이 생략되고
-first 옵션에 의해 생략된 다음 가장 맨 첫 줄이 출력됩니다.
아래 코드를 복사하여 testShell.ps1 파일을 만들어 줍니다.
$LOG_DIR = "C:\tistory"
$LOG_FILENAME = "logFile.txt"
$FILE_LINE = (Get-Content "$LOG_DIR\$LOG_FILENAME").Length
for($VAR=0; $VAR -lt $FILE_LINE; $VAR++) { # -lt = '<'
$DATETIME = Get-Date -Uformat "%Y-%m-%d %H:%M:%S"
$LINE = Get-Content $LOG_FILENAME | Select-Object -Skip $VAR -first 1
Write-Output "$DATETIME`: $LINE"
Start-Sleep -Seconds 1
}
logFile.txt의 총 라인 수(Length)를 구하고
라인 수만큼 for문을 돌려 각 메시지 앞에 날짜(타임스탬프)를 같이 출력해 보겠습니다.
짠🎉 로그 내용 앞에 현재 시각이 같이 출력된 모습입니다.
한 줄씩 잃어와서 내가 원하는 내용을 추가하여 내용을 변형하는 방법으로 활용해 볼 수 있습니다.
PowerShell(파워쉘) Tail 명령어가 안될 때 해결방법 (0) | 2023.07.06 |
---|---|
PowerShell(파워쉘) 파일 라인 수 출력 (Feat. 파일 변화 모니터링, Length & Tail) (1) | 2023.07.01 |
PowerShell(파워쉘) 날짜 포맷 변경 및 날짜 계산하기 (0) | 2023.06.29 |
PowerShell(파워쉘) 파일 내 특정문자 내용 변경하기 (Replace) (0) | 2023.06.28 |
PowerShell(파워쉘)명령어 파일내 문자열 찾기 (값 추출) (0) | 2023.06.23 |