如果 awk 命令中的条件在 BEGIN 块中没有按预期工作。如果我错了请纠正我
if condition in awk command is not working as expected in BEGIN block. correct me if am wrong
我有如下命令
kubectl get pods |
grep -v 1/1 |
grep -v 2/2 |
awk '{print ::}' |
awk 'BEGIN{ print "<style>table,th,td {border:1px solid black;}
来自 kubectl
的示例输出:
NAMESPACE NAME READY STATUS RESTARTS
ABC ABC-jkij 1/1 RUNNING 897
BAC BAC-jkij 2/2 RUNNING 897
HJI HJI-jkij 2/2 RUNNING 897
kubectl get pods | grep -v 1/1 | grep -v 2/2 | awk '{print ::}'
上面的命令只会产生如下所示的 headers,因为我保留了 -v
:
NAMESPACE NAME READY STATUS RESTARTS
所以在 Awk 中我们没有正确的记录变量,我想在 Awk 块中放置一个条件,它应该只在有任何 0/1 或 0/2 pod 结果时打印,而不仅仅是 headers.
总结一下
NAMESPACE NAME READY STATUS RESTARTS
--> awk 不应打印任何内容
NAMESPACE NAME READY STATUS RESTARTS
ABC ABC-jkij 0/1 RUNNING 897
ABC ABC-jkij 0/2 RUNNING 897
Awk 应仅在上述情况下打印。
如果没有 pods with 0/1 0/2 etc., status,上面的命令将给出 headers like NAME NAMESPACE STATUS
作为输出。现在我想包括一个 if
条件说 if (NR >1 )
那么只有它应该打印否则它不应该打印任何东西,即 headers。如果我试图将 if (NR>1)
放在开始块中,它仍在打印 headers.
通常应避免将 Awk 管道连接到 Awk;它是一种脚本语言,因此您可以添加任意多的语句。
kubectl get pods |
awk 'NR>1 && !/1\/1|2\/2/ {
if (!headers++) print "<style>table,th,td {border:1px solid black;}</style><table>"
print "<tr>"
for (i=1; i<=3; ++i) printf "<td>%s</td>\n", $i
print "</tr>"
}
END { if (headers) print "</table>" }'
我不得不猜测一下您的预期输出是什么,但如果有问题,我希望应该很容易看出要修复什么。
我有如下命令
kubectl get pods |
grep -v 1/1 |
grep -v 2/2 |
awk '{print ::}' |
awk 'BEGIN{ print "<style>table,th,td {border:1px solid black;}
来自 kubectl
的示例输出:
NAMESPACE NAME READY STATUS RESTARTS
ABC ABC-jkij 1/1 RUNNING 897
BAC BAC-jkij 2/2 RUNNING 897
HJI HJI-jkij 2/2 RUNNING 897
kubectl get pods | grep -v 1/1 | grep -v 2/2 | awk '{print ::}'
上面的命令只会产生如下所示的 headers,因为我保留了 -v
:
NAMESPACE NAME READY STATUS RESTARTS
所以在 Awk 中我们没有正确的记录变量,我想在 Awk 块中放置一个条件,它应该只在有任何 0/1 或 0/2 pod 结果时打印,而不仅仅是 headers.
总结一下
NAMESPACE NAME READY STATUS RESTARTS
--> awk 不应打印任何内容
NAMESPACE NAME READY STATUS RESTARTS
ABC ABC-jkij 0/1 RUNNING 897
ABC ABC-jkij 0/2 RUNNING 897
Awk 应仅在上述情况下打印。
如果没有 pods with 0/1 0/2 etc., status,上面的命令将给出 headers like NAME NAMESPACE STATUS
作为输出。现在我想包括一个 if
条件说 if (NR >1 )
那么只有它应该打印否则它不应该打印任何东西,即 headers。如果我试图将 if (NR>1)
放在开始块中,它仍在打印 headers.
通常应避免将 Awk 管道连接到 Awk;它是一种脚本语言,因此您可以添加任意多的语句。
kubectl get pods |
awk 'NR>1 && !/1\/1|2\/2/ {
if (!headers++) print "<style>table,th,td {border:1px solid black;}</style><table>"
print "<tr>"
for (i=1; i<=3; ++i) printf "<td>%s</td>\n", $i
print "</tr>"
}
END { if (headers) print "</table>" }'
我不得不猜测一下您的预期输出是什么,但如果有问题,我希望应该很容易看出要修复什么。