Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Select second or third object / element

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?

like image 634
Tobi123 Avatar asked Aug 05 '15 11:08

Tobi123


2 Answers

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.

like image 177
Ansgar Wiechers Avatar answered Oct 14 '22 13:10

Ansgar Wiechers


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.

like image 35
MahmutKarali Avatar answered Oct 14 '22 15:10

MahmutKarali