"헤드-n-3"에 해당하는 PowerShell?
기본적인 헤드/테일 기능을 추적할 수 있었습니다.
head -10 myfile <==> cat myfile | select -first 10
tail -10 myfile <==> cat myfile | select -last 10
하지만 마지막 세 줄을 제외한 모든 줄을 나열하거나 처음 세 줄을 제외한 모든 줄을 나열하려면 어떻게 해야 합니까?유닉스에서는 "헤드-n-3" 또는 "테일-n+4"를 할 수 있었습니다.PowerShell에 대해 이 작업을 수행하는 방법은 명확하지 않습니다.
유용한 정보는 여기에 있는 다른 답변들에 걸쳐 있지만, 저는 다음과 같이 간결하게 요약하는 것이 유용하다고 생각합니다.
처음 세 개를 제외한 모든 라인
1..10 | Select-Object -skip 3
returns (one per line): 4 5 6 7 8 9 10
마지막 세 개를 제외한 모든 라인
1..10 | Select-Object -skip 3 -last 10
returns (one per line): 1 2 3 4 5 6 7
즉, 내장된 PowerShell 명령을 사용하여 이 작업을 수행할 수 있지만 들어가는 크기를 지정해야 하는 번거로움이 있습니다.간단한 해결 방법은 가능한 모든 입력보다 큰 상수를 사용하는 것이며 사전에 크기를 알 필요가 없습니다.
1..10 | Select-Object -skip 3 -last 10000000
returns (one per line): 1 2 3 4 5 6 7
더 깨끗한 구문은 Keith Hill이 제안한 대로 PowerShell Community Extensions의 Skip-Object cmdlet을 사용하는 것입니다(Goyuix의 답변에 있는 Skip-Last 함수는 동일하게 수행되지만 PSCX를 사용하면 코드를 유지할 필요가 없습니다).
1..10 | Skip-Object -last 3
returns (one per line): 1 2 3 4 5 6 7
첫번째세 줄
1..10 | Select-Object –first 3
returns (one per line): 1 2 3
지난세 줄
1..10 | Select-Object –last 3
returns (one per line): 8 9 10
가운데네 줄
(이것이 작동하는 이유는-skip
이전에 처리됩니다.-first
호출의 매개 변수 순서에 관계없이.)
1..10 | Select-Object -skip 3 -first 4
returns (one per line): 4 5 6 7
-First 및 -Last 매개변수와 마찬가지로 -Skip 매개변수도 유용합니다.-Skip은 0이 아니라 1을 기반으로 합니다.
# this will skip the first three lines of the text file
cat myfile | select -skip 3
PowerShell이 사전 구축된 마지막 n개 라인을 제외한 모든 것을 되돌려 줄 수 있는 것이 있는지 확신할 수 없습니다.길이를 알면 라인 카운트에서 n을 빼고 선택에서 -First 파라미터를 사용할 수 있습니다.또한 채워질 때만 라인을 통과하는 버퍼를 사용할 수 있습니다.
function Skip-Last {
param (
[Parameter(Mandatory=$true,ValueFromPipeline=$true)][PsObject]$InputObject,
[Parameter(Mandatory=$true)][int]$Count
)
begin {
$buf = New-Object 'System.Collections.Generic.Queue[string]'
}
process {
if ($buf.Count -eq $Count) { $buf.Dequeue() }
$buf.Enqueue($InputObject)
}
}
데모로:
# this would display the entire file except the last five lines
cat myfile | Skip-Last -count 5
PowerShell Community Extensions를 사용하는 경우 마지막 N개 항목을 제외한 모든 출력을 통과하는 Take-Object cmdlet이 있습니다. 예:
30# 1..10 | Skip-Object -Last 4
1
2
3
4
5
6
마지막을 제외한 모든 것n
으로 할 수 있는
... | select -skiplast $n
다음과 같이 할 수 있습니다.
[array]$Service = Get-Service
$Service[0] #First Item
$Service[0..2] #First 3 Items
$Service[3..($Service.Count)] #Skip the first 3 lines
$Service[-1] #Last Item
$Service[-3..-1] #Last 3 Items
$Service[0..($Service.Count -4)] #Skip the last 3 lines
첫 번째를 제외한 모든 것n
으로 할 수 있는
... | Select -skip $n
하지만 마지막을 제외한 모든 것.m
내장된 것이 없습니다.길이를 얻기 위해 전체 입력을 어레이에 로드하는 것은 가능합니다. 물론 메모리에 무리한 요구를 가할 수 있는 큰 입력의 경우도 마찬가지입니다.
언급URL : https://stackoverflow.com/questions/10079572/powershell-equivalent-for-head-n-3
'programing' 카테고리의 다른 글
새 줄을 분할하는 방법 (0) | 2023.08.13 |
---|---|
MySQL/MariaDB에서 임의 절차 코드 실행 (0) | 2023.08.13 |
MySQL Workbench 스키마 패널이 작동하지 않음 (0) | 2023.08.13 |
jQuery를 사용하여 페이지를 앵커로 스크롤하거나 아래로 이동하는 방법은 무엇입니까? (0) | 2023.08.13 |
위치 서비스를 사용할 수 있는지 확인 (0) | 2023.08.08 |