Powershell select-object пропускает несколько строк? - PullRequest
16 голосов
/ 06 апреля 2010

Можно ли пропустить несколько строк с параметром -skip?

gc d:\testfile.txt | select -skip 3

работает, но что делать, если я хочу удалить строку 3-7 ??

Ответы [ 4 ]

20 голосов
/ 06 апреля 2010

Вы также можете использовать свойство readcount для исключения строк:

get-content d:\testfile.txt | where {$_.readcount -lt 3 -or $_.readcount -gt 7}
8 голосов
/ 06 апреля 2010

Если мне нужно выбрать только несколько строк, я бы напрямую проиндексировал массив:

$x = gc c:\test.txt
$x[(0..2) + (8..($x.Length-1))]

Также возможно создание функции Skip-Objects

function Skip-Object {
    param(
        [Parameter(Mandatory=$true,ValueFromPipeline=$true)][PsObject]$InputObject,
        [Parameter(Mandatory=$true)][int]$From,
        [Parameter(Mandatory=$true)][int]$To
    )

    begin {
        $i = -1
    }
    process {
        $i++
        if ($i -lt $from -or $i -gt $to)  {
            $InputObject
        }
    }
}

1..6 | skip-object -from 1 -to 2   #returns 1,4,5,6
'a','b','c','d','e' | skip-object -from 1 -to 2 #returns a, d, e
4 голосов
/ 06 апреля 2010

Расширения сообщества PowerShell поставляется с командлетом Skip-Object:

PS> 0..10 | Skip-Object -Index (3..7)
0
1
2
8
9
10

Обратите внимание, что параметр Index основан на 0.

2 голосов
/ 30 сентября 2015

Аналогично, без расширений (обратите внимание, что -skip нужно пропустить количество элементов, а не индекс)

$content = get-content d:\testfile.txt
($content | select -first 3), ($content | select -skip 8)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...