Bash 如何按名称“docker service ls”排序`
我使用的是Docker Swarm 1.13.1,按名称(A-Z)列出服务是非常实用的 我不认为Docker在本地支持这一壮举,所以我希望有一些awk、sort和其他小技巧 到目前为止,这是我能得到的最接近的结果:Bash 如何按名称“docker service ls”排序`,bash,docker,Bash,Docker,我使用的是Docker Swarm 1.13.1,按名称(A-Z)列出服务是非常实用的 我不认为Docker在本地支持这一壮举,所以我希望有一些awk、sort和其他小技巧 到目前为止,这是我能得到的最接近的结果: root@N01-par1-dev-e:~/deploy-setup# docker service ls | sort -k2,2 -k1 yru8n6zxmp08 consul global 4/4 consul:latest 1lb
root@N01-par1-dev-e:~/deploy-setup# docker service ls | sort -k2,2 -k1
yru8n6zxmp08 consul global 4/4 consul:latest
1lb98n83fttr mysql replicated 1/1 devmtl/percona-fire:5.7.16-10-1
ID NAME MODE REPLICAS IMAGE
i75t4zef8x8c papertrail global 4/4 gliderlabs/logspout:latest
4s14t7f13fp8 portainer replicated 1/1 portainer/portainer:1.11.3
8wojufyq3dwn resilio global 4/4 devmtl/resilio-fire:2.4.4-alpine-0
vn8fhhfvb6pw sematext global 4/4 sematext/sematext-agent-docker:1.31.11
mwxtlff6jyl5 thm-s0001-iamfoo replicated 1/1 devmtl/iam-this-ctn:1.0.1-alpine-0
o8p4q85axkwy thm-s0002-iambar replicated 1/1 devmtl/iam-this-ctn:1.0.1-alpine-0
wedrfqzkg3zp thm-s0003-caply replicated 1/1 devmtl/nginx-fire:1.10.3-alpine-0
ql9yapc0brnk thm-s0003-valgo replicated 1/1 devmtl/caddy:0.9.5-alpine-0
vu3jhyo71oos traefik replicated 1/1 traefik:v1.1.2-alpine
或者
root@N01-par1-dev-e:~/deploy-setup# docker service ls | tail -n +2 | sort -k2,2 -k1
yru8n6zxmp08 consul global 4/4 consul:latest
1lb98n83fttr mysql replicated 1/1 devmtl/percona-fire:5.7.16-10-1
i75t4zef8x8c papertrail global 4/4 gliderlabs/logspout:latest
4s14t7f13fp8 portainer replicated 1/1 portainer/portainer:1.11.3
8wojufyq3dwn resilio global 4/4 devmtl/resilio-fire:2.4.4-alpine-0
vn8fhhfvb6pw sematext global 4/4 sematext/sematext-agent-docker:1.31.11
mwxtlff6jyl5 thm-s0001-iamfoo replicated 1/1 devmtl/iam-this-ctn:1.0.1-alpine-0
o8p4q85axkwy thm-s0002-iambar replicated 1/1 devmtl/iam-this-ctn:1.0.1-alpine-0
wedrfqzkg3zp thm-s0003-caply replicated 1/1 devmtl/nginx-fire:1.10.3-alpine-0
ql9yapc0brnk thm-s0003-valgo replicated 1/1 devmtl/caddy:0.9.5-alpine-0
vu3jhyo71oos traefik replicated 1/1 traefik:v1.1.2-alpine
或使用2个命令执行此操作:
root@N01-par1-dev-e:~/deploy-setup# echo; \
> docker service ls | head -n 1; \
> docker service ls | tail -n +2 | sort -k2,2 -k1; echo;
ID NAME MODE REPLICAS IMAGE
yru8n6zxmp08 consul global 4/4 consul:latest
1lb98n83fttr mysql replicated 1/1 devmtl/percona-fire:5.7.16-10-1
i75t4zef8x8c papertrail global 4/4 gliderlabs/logspout:latest
4s14t7f13fp8 portainer replicated 1/1 portainer/portainer:1.11.3
8wojufyq3dwn resilio global 4/4 devmtl/resilio-fire:2.4.4-alpine-0
vn8fhhfvb6pw sematext global 4/4 sematext/sematext-agent-docker:1.31.11
mwxtlff6jyl5 thm-s0001-iamfoo replicated 1/1 devmtl/iam-this-ctn:1.0.1-alpine-0
o8p4q85axkwy thm-s0002-iambar replicated 1/1 devmtl/iam-this-ctn:1.0.1-alpine-0
wedrfqzkg3zp thm-s0003-caply replicated 1/1 devmtl/nginx-fire:1.10.3-alpine-0
ql9yapc0brnk thm-s0003-valgo replicated 1/1 devmtl/caddy:0.9.5-alpine-0
vu3jhyo71oos traefik replicated 1/1 traefik:v1.1.2-alpine
提前谢谢 您可以使用
awk
从name
列中提取名称,并对生成的名称数组进行排序,以便按照以下顺序打印行:
对于docker service ls
,存储名称
和模式
的位置以对名称进行子串。然后使用以下方法处理键数组(包含名称)的排序:
检查t以了解asort的另一个示例那么,到目前为止您尝试了什么?嗨,Pascal,我看到您已经运行了Portainer,为什么不直接在UI中对它们进行排序呢?:)我在终端开发,我从终端启动所有东西。但是,是的,Portainer对其他用户来说仍然很好:)
docker service ls | awk '
{
if (NR == 1) {
print $0
names=index($0,"NAME")
mode=index($0,"MODE")
}
else{
key[NR-2]=substr($0,names,mode-1-names) "\t" NR
value[NR-2]=$0
}
}
END {
asort(key)
for (i=1; i<=(NR-1); i++) {
split(key[i],a,"\t")
print value[a[2]-2]
}
}'
docker ps -a | awk '
{
if (NR == 1) {
print $0
names=index($0,"NAME")
}
else{
key[NR-2]=substr($0, names, 100) "\t" NR
value[NR-2]=$0
}
}
END {
asort(key)
for (i=1; i<=(NR-1); i++) {
split(key[i],a,"\t")
print value[a[2]-2]
}
}'