在 powershell 中对来自 `docker ps` 的输出进行排序,同时将 table header 保持在顶部
Sort output from `docker ps` in powershell while keeping table header at the top
在我的 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
}
以这种方式对行进行排序效果很好,并按名称对我的容器进行分组,但是 table header 最终出现在输出的 中间 .
你可以看到我试图将第一行输出(header)分开,但我不知道如何让table继续打印。如何在排序和打印 table 时将 table header 保持在顶部?
示例输出
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
尝试在没有 headers 的情况下使用相同的输出:
docker ps --format "{{.Names}}\t{{.ID}}\t{{.Status}}\t{{.Ports}}" | Sort-Object
我建议先将制表符分隔的输出转换为对象,然后再排序。
function dps {
docker ps --format "table {{.Names}}\t{{.ID}}\t{{.Status}}\t{{.Ports}}" |
ConvertFrom-Csv -delimiter "`t" |Sort-Object Names
}
应该return这样:
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
LotPing 的回答很接近,但重复了 header 信息。将它与 Volodymyr 的答案结合起来给我们这个:
function dps {
docker ps --format "{{.Names}}\t{{.ID}}\t{{.Status}}\t{{.Ports}}" |
ConvertFrom-CSV -Delimiter "`t" -Header ("Names","Id","Status","Ports") |
Sort-Object Names
}
这具有所需的输出!谢谢大家。
在我的 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
}
以这种方式对行进行排序效果很好,并按名称对我的容器进行分组,但是 table header 最终出现在输出的 中间 .
你可以看到我试图将第一行输出(header)分开,但我不知道如何让table继续打印。如何在排序和打印 table 时将 table header 保持在顶部?
示例输出
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
尝试在没有 headers 的情况下使用相同的输出:
docker ps --format "{{.Names}}\t{{.ID}}\t{{.Status}}\t{{.Ports}}" | Sort-Object
我建议先将制表符分隔的输出转换为对象,然后再排序。
function dps {
docker ps --format "table {{.Names}}\t{{.ID}}\t{{.Status}}\t{{.Ports}}" |
ConvertFrom-Csv -delimiter "`t" |Sort-Object Names
}
应该return这样:
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
LotPing 的回答很接近,但重复了 header 信息。将它与 Volodymyr 的答案结合起来给我们这个:
function dps {
docker ps --format "{{.Names}}\t{{.ID}}\t{{.Status}}\t{{.Ports}}" |
ConvertFrom-CSV -Delimiter "`t" -Header ("Names","Id","Status","Ports") |
Sort-Object Names
}
这具有所需的输出!谢谢大家。