4

У меня есть простой текстовый файл:

$ cat food.txt
Apples
Bananas
Carrots

Linux/Cygwin

И я могу придумать несколько способов получить номера строк в Linux/Cygwin:

$ nl food.txt
     1  Apples
     2  Bananas
     3  Carrots

$ cat -n food.txt
     1  Apples
     2  Bananas
     3  Carrots

$ less -NFX food.txt
      1 Apples
      2 Bananas
      3 Carrots

PowerShell

Лучшее, что я придумал, это:

Обновление 2017-11-27Мо: (1) Добавлен небольшой твик : Out-String -Stream для принудительного уведомления этих надоедливых объектов. (2) Примечание: я ищу что-то, что примет ТРУБОПРОВОДНОЙ ВХОД.

PS C:\> function nl{$input | Out-String -Stream | Select-String '.*' | Select-Object LineNumber, Line}

PS C:\> cat .\food.txt | nl
LineNumber Line
---------- ----
         1 Apples
         2 Bananas
         3 Carrots

Есть ли более простой способ? Более короткие? Что-то встроенное в PowerShell?

2 ответа2

1

Я включил свою строку в функцию, которую вы можете включить в один из ваших профилей Powershell.

Function nl 
{
<# .Synopsis
    Mimic Unic / Linux tool nl number lines
   .Description
    Print file content with numbered lines no original nl options supported
   .Example
     nl .\food.txt
#>
  param (
    [parameter(mandatory=$true, Position=0)][String]$FileName
  )

  process {
    If (Test-Path $FileName){
      Get-Content $FileName | ForEach{ "{0,5} {1}" -f $_.ReadCount,$_ }
    }
  }
}

Образец вывода:

> nl .\food.txt
    1 Apples
    2 Bananas
    3 Carrots
0

Это сделает это и будет работать с любой командой, которая производит вывод:

$ i = 1; cat food.txt | % {$ i++; "$($ i-1)` t $ _ "}

Вот вывод:

1        Apples
2        Bananas
3        Carrots

Вот пример, если со списком каталогов:

$ i = 1; dir | % {$ i++; "$($ i-1)` t $ _ "}

Вот вывод:

1        backgrounds
2        boot
3        inetpub
4        PerfLogs
5        Program Files
6        Program Files (x86)
7        Riot Games
8        Users
9        Windows
10       Reflect_Install.log

Очевидно, что если вы хотите, чтобы нумерация строк начиналась с 0, то установите $i = 0

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .