Bash 带条件的awk打印第1行

Bash 带条件的awk打印第1行,bash,awk,Bash,Awk,命令: kubectl get pods -n hello | awk '$1 ~ "hello-uwsgi-deployment" {print $1}' 输出 hello-uwsgi-deployment-5b7498f864-4bfrx hello-uwsgi-deployment-5b7498f864-h9rxz hello-uwsgi-deployment-5b7498f864-qlg8z hello-uwsgi-deployment-5b7498f864-r5nfs hello-

命令:

kubectl get pods -n hello | awk '$1 ~ "hello-uwsgi-deployment"  {print $1}'
输出

hello-uwsgi-deployment-5b7498f864-4bfrx
hello-uwsgi-deployment-5b7498f864-h9rxz
hello-uwsgi-deployment-5b7498f864-qlg8z
hello-uwsgi-deployment-5b7498f864-r5nfs
hello-uwsgi-deployment-5b7498f864-vxr6x
如何使用awk仅打印具有上述条件的第一行

我试过了

kubectl get pods -n hello |
awk '($1 ~ "hello-uwsgi-deployment") && ('NR==1') {print $1}'
但它什么也不输出

编辑:kubectl get pods-n hello | awk'$1~/hello-uwsgi-deployment/{print;exit}这非常有效


如何使用==和NR==使用多个条件语句获得相同的结果?

如果我正确回答了您的问题,您只想打印第一行,其中包含字符串hello uwsgi deployment,那么请尝试以下内容。我还使用了exit,这样它就不会读取整个输入文件,从而为我们节省时间

kubectl get pods -n hello | awk '($1 ~ /hello-uwsgi-deployment/){print;exit}'
或者,您只需在整行中搜索字符串,然后尝试以下操作:

kubectl get pods -n hello | awk '/hello-uwsgi-deployment/{print;exit}'

您可以将输出重定向到head命令:

kubectl get pods -n hello | awk '$1 ~ "hello-uwsgi-deployment"  {print $1}' | head -n 1

关键是在第一次打印后退出。我不确定括号是否必要;问题中的代码不需要它们。@JonathanLeffler,谢谢:是的,你是对的,它们不是必需的。为了更好地理解,我添加了它们,我们也可以删除它们,干杯:这个命令非常适合这个用例,但问题是如何让awk在多个条件下工作以用于同一用途case@MR.i,此代码是针对显示的问题和示例给出的。如果您有任何其他要求/问题,请将其添加到您的问题中,并让我知道您的问题,但问题是如何使awk在同一用例的多个条件下工作。这很好,我已经尝试过了,如何仅使用awk获得相同的输出?您可以使用exit语句。exit语句将完成对任何输入的处理,并直接转到awk的END部分。如果没有结束,它将终止awk。因此,只需执行条件{print$1;exit}您没有在第一个条件$1周围添加单引号~ hello uwsgi部署如果您只对第二个条件执行了相同的操作,即编写了NR==1而不是“NR==1”,那么您的脚本就可以工作了,只是比将exit添加到acrion的效率要低一点。