使用awk如何在满足条件时打印选择性列



问题:我想列出所有与表达式"test-"匹配的pod,我的表达式对这些pod运行良好,然后如果行中存在该表达式,我只想打印$1和$2。我怎么能?我想用一个AWK做这件事,不要再管了。

kubectl get pods --all-namespaces --field-selector=spec.nodeName=node1,status.phase!=Succeeded --no-headers | awk '$1 ~ /maglev-/'

输出

test-78ac951e-89a6-4199-87a4-db8a1b8b054f   export-4cb52be4-8a90-400-ilxr4b-avexport-xavierisp-sjc4--b76888-b3f   1/1   Running   0     20h
test-78ac951e-89a6-4199-87a4-db8a1b8b054f   export-9b55f0d5-071d-431-1d2ux0-avexport-xavierisp-sjc4--a4dd85-102   1/1   Running   0     17h
dtlu @ dtlu16 ~
└─ $ ▶ kubectl get pods --all-namespaces --field-selector=spec.nodeName=node1,status.phase!=Succeeded --no-headers | awk '$1 ~ /test-/' '{print $1,$2}'

实际输出:

awk: cannot open {print $1,$2} (No such file or directory)

预期输出

test-78ac951e-89a6-4199-87a4-db8a1b8b054f   export-4cb52be4-8a90-400-ilxr4b-avexport-xavierisp-sjc4--b76888-b3f
test-78ac951e-89a6-4199-87a4-db8a1b8b054f   export-9b55f0d5-071d-431-1d2ux0-avexport-xavierisp-sjc4--a4dd85-102

在模式匹配后以单独的引号提供'{$1, $2}',从而导致awk语法不正确。它们需要结合在一起。您的语法使awk相信'{$1, $2}'是在.上运行表达式的文件名

awk '$1 ~ /test-/{print $1, $2}'

这不是像那么简单吗

kubectl get pods --all-namespaces --field-selector=spec.nodeName=node1,status.phase!=Succeeded --no-headers | egrep "^test-" | awk '{print $1" "$2}'

最新更新