Сортировать вывод из `docker ps` в powershell, сохраняя заголовок таблицы сверху - PullRequest
0 голосов
/ 07 декабря 2018

В моем профиле powershell у меня есть ярлык на docker ps, с форматом, установленным для улучшения читабельности

function dps {
    docker ps --format "table {{.Names}}\t{{.ID}}\t{{.Status}}\t{{.Ports}}" | Sort-Object

    #     ????
    #    Tee-Object -Variable lines |
    #    select -first 1 |
    #    Write-Host;
    #    $lines | Sort-Object | Write-Host # Prints nothing
}

. Сортировка строк таким образом работает хорошо и группирует мои контейнеры по имени, но таблицазаголовок заканчивается в middle вывода.

Вы можете видеть, что я пытался выделить первую строку вывода (заголовок), но я не мог понять, какполучить таблицу, чтобы продолжить печать.Как сохранить заголовок таблицы сверху при сортировке и печати таблицы?

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

database_A                27b33272e64c        Up 15 hours                       3306/tcp, 33060/tcp
database_B                1b1662223f17        Up 15 hours                       33060/tcp, 0.0.0.0:33640->3306/tcp
database_C                8f98fc0890cc        Up 15 hours                       3306/tcp, 33060/tcp
framework_A               a0d829729c8e        Up 15 hours (unhealthy)           5050/tcp, 0.0.0.0:5170->80/tcp
NAMES                     CONTAINER ID        STATUS                            PORTS
service_A                 8708aec85ea7        Up 15 hours (healthy)             0.0.0.0:5100->8080/tcp
service_B                 7931365f450e        Up 15 hours (unhealthy)           5160/tcp, 0.0.0.0:5160->80/tcp
service_C                 e9b9272011d8        Up 15 hours (unhealthy)           5160/tcp, 0.0.0.0:5110->80/tcp

Ответы [ 3 ]

0 голосов
/ 07 декабря 2018

Я предлагаю сначала преобразовать вывод с разделителями табуляции в объект, а затем отсортировать.

function dps {
    docker ps --format "table {{.Names}}\t{{.ID}}\t{{.Status}}\t{{.Ports}}" | 
       ConvertFrom-Csv -delimiter  "`t" |Sort-Object Names
}

Должен вернуть следующее:

NAMES       CONTAINER ID STATUS                  PORTS
-----       ------------ ------                  -----
database_A  27b33272e64c Up 15 hours             3306/tcp, 33060/tcp
database_B  1b1662223f17 Up 15 hours             33060/tcp, 0.0.0.0:33640->3306/tcp
database_C  8f98fc0890cc Up 15 hours             3306/tcp, 33060/tcp
framework_A a0d829729c8e Up 15 hours (unhealthy) 5050/tcp, 0.0.0.0:5170->80/tcp
service_A   8708aec85ea7 Up 15 hours (healthy)   0.0.0.0:5100->8080/tcp
service_B   7931365f450e Up 15 hours (unhealthy) 5160/tcp, 0.0.0.0:5160->80/tcp
service_C   e9b9272011d8 Up 15 hours (unhealthy) 5160/tcp, 0.0.0.0:5110->80/tcp
0 голосов
/ 10 декабря 2018

Ответ LotPing был близок, но дублировал информацию заголовка.Объединение его с ответом Владимира дает нам следующее:

function dps {
  docker ps --format "{{.Names}}\t{{.ID}}\t{{.Status}}\t{{.Ports}}" |
  ConvertFrom-CSV -Delimiter "`t" -Header ("Names","Id","Status","Ports") |
  Sort-Object Names
}

Это дает желаемый результат!Спасибо всем.

0 голосов
/ 07 декабря 2018

Попробуйте использовать тот же вывод без заголовков:

docker ps --format "{{.Names}}\t{{.ID}}\t{{.Status}}\t{{.Ports}}" | Sort-Object
...