首页 > 解决方案 > 在管道后的 nlines 上的 bash 和 xargs 循环中

问题描述

团队,我的以下命令,对任何有问题的 pod 进行 greps,然后将它们一一删除并删除。

但我只想使用命令输出的前 10 行。

kubectl get pods --all-namespaces | grep -i -e Evict -e Error | 
    awk -F ' ' '{print $1, $2, $4}' | 
    xargs -l1 -- sh -c 'kubectl delete pod "$2" -n "$1"' --

上面的命令正在删除所有行,但我只想删除前 10 行。任何提示?

我试过了

kubectl get pods --all-namespaces | grep -i -e Evict -e Error | 
    awk -F ' ' '{print $1, $2, $4}' | for run{1..10}; do 
        xargs -l1 -- sh -c 'kubectl delete pod "$2" -n "$1" ' --; 
    done

曾经,我知道这一点,我可以将它用于任何命令节点或 pod。

标签: bashxargs

解决方案


在传递给 xargs 之前,您可以使用它head来获取前 10 行输出。使用-n选项指定行数(在本例中为head -n10

就在管道到 之前xargs,插入以下内容:| head -n10 |。这将过滤除前面输出的前十行之外的所有内容。

尝试这个:

kubectl get pods --all-namespaces | grep -i -e Evict -e Error | awk -F ' ' '{print $1, $2, $4}' | head -n10 | xargs -l1 -- sh -c 'kubectl delete pod "$2" -n "$1"' --


推荐阅读