select second or third object / element

耗尽温柔 提交于 2019-12-08 23:54:48

问题


I want to select the second/third/forth object of a Get-ChildItem statement in my PowerShell script. This gives me the first:

$first = Get-ChildItem -Path $dir |
         Sort-Object CreationTime -Descending |
         Select-Object -First 1

This gives me the first three:

$latest = Get-ChildItem -Path $dir |
          Sort-Object CreationTime -Descending |
          Select-Object -First 3

I would like to get the second, or the third, or the fourth. (NOT the first two and so on).

Is there a way?


回答1:


For selecting the n-th element skip over the first n-1 elements:

$third = Get-ChildItem -Path $dir |
         Sort-Object CreationTime -Descending |
         Select-Object -Skip 2 |
         Select-Object -First 1

or select the first n and then of those the last element:

$third = Get-ChildItem -Path $dir |
         Sort-Object CreationTime -Descending |
         Select-Object -First 3 |
         Select-Object -Last 1

Beware, though, that the two approaches will yield different results if the input has less than n elements. The first approach would return $null in that scenario, whereas the second approach would return the last available element. Depending on your requirements you may need to choose one or the other.




回答2:


The second approach suggested by @AnsgarWiechers can easily be turned into a simple reusable funtion, like so:

function Select-Nth {
    param([int]$N) 

    $Input | Select-Object -First $N | Select-Object -Last 1
}

And then

PS C:\> 1,2,3,4,5 |Select-Nth 3
3



回答3:


You could also access the element as an array item, using the index n-1. This seems more succinct than chaining pipes.

$third = (Get-ChildItem -Path $dir | Sort-Object CreationTime -Descending)[2]



回答4:


First Item

gci > out.txt
Get-Content out.txt | Select -Index 7 | Format-list

Second Item

gci > out.txt
Get-Content out.txt | Select -Index 8 | Format-list

The item between n and p

$n=3 
$p=7
$count = 0
$index = $n+7
$p=7+7
while($true){ 
   $index = $index + $count
   Get-Content out.txt | Select -Index $index | Format-list
   if($index -eq $p)
   {    
      break;
   }
   $count = $count + 1 
}

Note : The first seven lines are empty and the description lines.



来源:https://stackoverflow.com/questions/31831470/select-second-or-third-object-element

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!