используя awk insd ie xargs - PullRequest
       28

используя awk insd ie xargs

0 голосов
/ 31 марта 2020

использование awk в конструкции xargs: получение другого вывода при попытке вставить awk внутри xargs - -

step1

 ~/waste/dgx-users2.log | head -n2
node1
node2

step2

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, поэтому фильтр ниже

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 -? Я попробовал ниже, но в нем отсутствует последняя строка вывода, которая отображается в моем ожидаемом выводе.

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

Не получается тот же вывод .. поэтому мне нужно настроить некоторый синтаксис, я думаю ... мой ожидаемый вывод должен быть .

Моя цель - напечатать информацию об этом узле вместе с выводом, чтобы я знал, на каком узле работает этот модуль, как показано ниже: узел1 не имеет ничего, а узел2 имеет его.

node1
node2
test-s test-pod                       3/3   Running   0     6d

1 Ответ

3 голосов
/ 31 марта 2020

Поскольку $1 в выражении awk анализируется в контексте двойных кавычек внутренней копией sh, его необходимо экранировать. То есть:

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}"
  ' --
...