programing

파워셸에서 머리, 꼬리, 더, 덜, 더, 덜, 더, 더, 더, 더, 더, 더, 더, 더, 더, 더, 더, 어떻게 하는

easyjava 2023. 4. 14. 22:19
반응형

파워셸에서 머리, 꼬리, 더, 덜, 더, 덜, 더, 더, 더, 더, 더, 더, 더, 더, 더, 더, 더, 어떻게 하는

Windows에서 Powershell을 사용하여 Linux와 동등한 명령어는 무엇입니까?head,tail,more,less그리고.sed?

Get-Content(필수:gc)는 텍스트 파일을 읽기 위한 일반적인 옵션입니다.다음에, 한층 더 필터링 할 수 있습니다.

gc log.txt | select -first 10 # head
gc -TotalCount 10 log.txt     # also head
gc log.txt | select -last 10  # tail
gc -Tail 10 log.txt           # also tail (since PSv3), also much faster than above option
gc log.txt | more             # or less if you have it installed
gc log.txt | %{ $_ -replace '\d+', '($0)' }         # sed

이것은 작은 파일에도 충분히 기능합니다.큰 파일(몇 MiB 이상)은 약간 느릴 수 있습니다.

PowerShell Community Extensions에는 특수 파일용 cmdlet(Get-FileTail 등)이 포함되어 있습니다.

다음은 기본 제공 방법입니다.head그리고.tail큰 파일을 가지고 있으면 매우 느리므로 파이프를 사용하지 마십시오.이러한 빌트인 옵션을 사용하면 대용량 파일에서도 매우 빠르게 사용할 수 있습니다.

gc log.txt -head 10 
gc log.txt -tail 10
gc log.txt -tail 10 -wait # equivalent to tail -f

more.exeWindows에 존재, 포트less쉽게 찾을 수 있습니다(PowerShell Community Extensions, PSCX에는 1개가 포함되어 있습니다).

PowerShell은 두 가지 프로그램 모두에 대해 별도의 프로그램을 제공하는 것이 아니라 구조화된 데이터를 위한 대체 프로그램을 제공합니다.Out-Grid도움이 될 수 있습니다.

Head그리고.Tail둘 다 에뮬레이트할 수 있다Select-Object사용방법-First그리고.-Last파라미터를 지정합니다.

Sed기능은 모두 사용할 수 있지만 구조가 다소 다릅니다.필터링 옵션은 다음에서 사용할 수 있습니다.Where-Object(또는 경유로)Foreach-Object및 범위에 대한 일부 상태).기타, 혁신, 운영은Select-Object그리고.Foreach-Object.

그러나 PowerShell이 (.NET) 오브젝트– 모든 타입의 구조(날짜 등)가 남아 있습니다.DateTimeinstance – 문자열뿐만 아니라 각 명령어가 자체 해석해야 하는 대부분의 경우sed그 외의 프로그램도 중복되어 있습니다.

이 인스턴스의 "-TotalCount"는 "-head"와 동일하게 응답합니다.이와 같은 명령어를 실행하려면 -TotalCount 또는 -head를 사용해야 합니다.그러나 -TotalCount는 오해를 불러일으킬 수 있습니다.실제로 카운트를 주는 것은 효과가 없습니다.

gc -TotalCount 25 C:\scripts\logs\robocopy_report.txt

PS 5.1에서 테스트된 위의 스크립트는 다음과 같은 응답입니다.

gc -head 25 C:\scripts\logs\robocopy_report.txt

그럼 이미 '-head 25'를 사용하세요!

Windows 로 큰(또는 작은) 로그 파일을 문의할 필요가 있는 경우는, Microsoft 의 무료 Log Parser 2.2 가 최적인 툴입니다.필요한 경우 PowerShell에서 호출할 수 있으며, 모든 무거운 작업을 수행할 수 있으며 매우 빠르게 수행할 수 있습니다.

몇 가지 더 나은 해결책이 있습니다.

gc log.txt -ReadCount 5 | %{$_;throw "pipeline end!"} # head
gc log.txt | %{$num=0;}{$num++;"$num $_"}             # cat -n
gc log.txt | %{$num=0;}{$num++; if($num -gt 2 -and $num -lt 7){"$num $_"}} # sed
$Push_Pop = $ErrorActionPreference #Suppresses errors
$ErrorActionPreference = “SilentlyContinue” #Suppresses errors
#Script
    #gc .\output\*.csv -ReadCount 5 | %{$_;throw "pipeline end!"} # head
    #gc .\output\*.csv | %{$num=0;}{$num++;"$num $_"}             # cat -n
    gc .\output\*.csv | %{$num=0;}{$num++; if($num -gt 2 -and $num -lt 7){"$num $_"}} # sed
#End Script 
$ErrorActionPreference = $Push_Pop #Suppresses errors

푸시팝 코드 BTW에서 모든 오류가 발생하는 것은 아닙니다. 코드는 "sed" 옵션에서만 작동합니다.나머지는 gc와 path를 제외한 모든 것을 무시합니다.

언급URL : https://stackoverflow.com/questions/9682024/how-to-do-what-head-tail-more-less-sed-do-in-powershell

반응형