如何检查docker实例在Bash中运行
有docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 56489a32cb8c 83132b61eccf "bash" 41 hours ago Exited (0) 41 hours ago naughty_jang 4b4933b40175 83119b65eccf "bash" 41 hours ago Exited (0) 41 hours ago suspicious_mcnulty 3149e612f9f8 83119b6143cf "sh" 43 hours ago Exited (0) 41 hours ago thirsty_mestorf
我想匹配STATUS
和NAMES
以检查哪个是实例状态,所以列5和列7从列索引1
。
假设我有选项卡分隔值
docker ps -a | awk -FS $'\t' '{print $5,$7}'
要么
docker ps -a | awk 'BEGIN {FS="\t"}; {print $5,$7}'
但是这不起作用,同时保留默认的空白字符为FS
docker ps -a | awk 'BEGIN {FS=" "}; {print $5,$7}'
所以我试图在时间上匹配一列
awk -F$" " -v COLT=$1 ' NR==1 { for (i=1; i<=NF; i++) { if ($i==COLT) { title=i; } } } NR>1 { if (i=title) { print $i } } '
假设你有这样的脚本
docker ps -a | ./status.sh NAMES
但由于不匹配的选项卡空格不起作用。 这里的问题是docker ps -a
的输出具有空格,而不是制表符,所以可变数量的空格,所以我应该使用特定的正则expression式作为FS
字段分隔符,但是我不知道如何。
一个简单的docker ps --format "{{.ID}} {{.Command}} {{.Status}}"
将更容易parsing,因为它只有三列。
通过格式化 ,您只能显示所需的最less信息,并在每列之间放置所需的分隔符。
OP loretoparisi 在评论中build议:
docker ps -a --format "{{.ID}}\t\"{{.Status}}\"\t{{.Names}}" | cut -f2 -d$'\t'
获得col 2,或者你可以这样做:
docker ps -a --format "{{.ID}}\t\"{{.Status}}\"\t{{.Names}}" | awk -F$"\t" '{printf "%s|%s|%s\n", $1, $2, $3}'
统治他们!