首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用awk insdie xargs构造

使用awk insdie xargs构造
EN

Stack Overflow用户
提问于 2020-03-31 05:05:48
回答 1查看 41关注 0票数 0

在xargs结构中使用awk :当我在xargs中输入awk时,获取不同的输出--

step1

代码语言:javascript
复制
 ~/waste/dgx-users2.log | head -n2
node1
node2

step2

代码语言:javascript
复制
cat ~/waste/dgx-users2.log | head -n2 | xargs -l1 -- sh -c 'echo $1 && kubectl get pods --field-selector=spec.nodeName=$1,status.phase=Running --all-namespaces --no-headers' --

node1
node2
test-s test-s-pod 3/3   Running   0     6d1h
dummy-s test-s-pod 1/1 Running 0 5d9h

但是我只想要列出$1中的test-s,所以在下面过滤

代码语言:javascript
复制
cat ~/waste/dgx-users2.log | head -n2 | xargs -l1 -- sh -c 'echo $1 && kubectl get pods --field-selector=spec.nodeName=$1,status.phase=Running --all-namespaces --no-headers' -- | awk '$1 ~ /test-*/ && /Running/ {print}'
test-s test-pod                       3/3   Running   0     6d

上面的一切都很好,但是有没有一种方法可以把awk放在xargs中呢?我尝试了下面,但它遗漏了我的预期输出中显示的最后一个输出行。

代码语言:javascript
复制
cat ~/waste/dgx-users2.log | head -n2 | xargs -l1 -- sh -c 'echo $1 && kubectl get pods --field-selector=spec.nodeName=$1,status.phase=Running --all-namespaces --no-headers | awk "$1 ~ /test-*/ && /Running/ {print}"' --
node1
node2

我没有得到相同的输出..所以我想需要调整一些语法..我的预期输出应该是。

我的目标是打印节点信息和输出,这样我就知道pod在哪个节点上运行,如下所示: node1没有任何内容,而node2有一个pod。

代码语言:javascript
复制
node1
node2
test-s test-pod                       3/3   Running   0     6d
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-31 05:12:06

由于awk表达式中的$1sh的内部副本在双引号上下文中解析,因此需要对其进行转义。这就是:

代码语言:javascript
复制
head -n2 <~/waste/dgx-users2.log | xargs -l1 -- sh -c '
    echo "$1" &&
    kubectl get pods --field-selector=spec.nodeName="$1",status.phase=Running \
                     --all-namespaces --no-headers |
    awk "\$1 ~ /test-*/ && /Running/ {print}"
  ' --
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60939509

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档