Невозможно распечатать инструкцию, когда значение 0 возвращается с помощью awk / bash - PullRequest
0 голосов
/ 21 марта 2020

awk для печати в выражении, возвращающем значение 0

Команда, я пытаюсь напечатать сообщение, основанное на возвращаемом значении (0 или не 0)

Если return не равен 0, мое выражение ниже удерживается хорошо. Но когда return равен 0, я не получаю распечатки. Любой совет, как справиться с этим?

$ ▶ echo $NON_ZERO_MATCH
team.com/gpu\s\+\([1-9][0-9]*\)\s\+[1-9][0-9]*
$ ▶ kubectl describe node 123 | sed -n 's%'"$NON_ZERO_MATCH"'%\1%p' | awk '$0 > 0 {print "team User pods Found and gpus used are:", $0;} $0 = 0 {print "team Users pods NotFound and gpus used are:", $0;}'
team Users pods in execution and gpus used are:   8
$ ▶ kubectl describe node 321 | sed -n 's%'"$NON_ZERO_MATCH"'%\1%p' | awk '$0 < 1 {print "team User pods Found and gpus used are:", $0;} $0 = 0 {print "team Users pods NotFound and gpus used are:", $0;}'
<< get no output

Output:
Expected: "team User pods NotFound and gpus used are:0"
Actual: [nothing]

Весь вывод для описания узла находится здесь https://github.com/ctxrag/dev/blob/stack-overflow-pull-pod-info/kubectl_node_describe.yaml

$ ▶ uname -a
Linux dtlu16 4.15.0-88-generic #88~16.04.1-Ubuntu SMP Wed Feb 12 04:19:15 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
dtlu @ dtlu16 ~/code/team/ai-infra (test-bala)
└─ $ ▶ sed --version | grep 4.2
sed (GNU sed) 4.2.2

Пример вывода: моя команда должна смотреть только в левую позицию десятичный и выведите, что для ниже он должен вывести 8 и игнорировать 0 справа.

team.com/gpu 8 0

выходные данные: команда Найдены пользовательские модули и использованы gpus: 8

Ответы [ 2 ]

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

Я играл с вашей командой sed, и это работает для меня:

cat kubectl_node_describe.yaml | sed -rn 's/.*gpu[[:space:]]+([0-9]+)[[:space:]]+[0-9]+/\1/p'

Обратите внимание, что в вашем файле есть test.com, но вы жестко запрограммированы для team.com, так что это не соответствует. Я удалил это, чтобы поместить. * И затем переписал sed немного больше. Я не смотрел на часть awk.

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

Используйте END{} блок awk, если вы можете показать результаты kubectl describe node 123, можно легко записать в awk сам по себе без необходимости sed и несколько каналов.

Например Пример:

your_command | awk 'END{print "team User pods NotFound and gpus used are: " $0+0}'`

В вашем случае

kubectl describe node 123 | sed -n 's%'"$NON_ZERO_MATCH"'%\1%p' |  awk 'END{print "team User pods NotFound and gpus used are: " $0+0}'

Вот результаты теста:

$ echo 1234 | awk 'END{print "team User pods NotFound and gpus used are: " $0+0}'
team User pods NotFound and gpus used are: 1234

$ cat /dev/null | awk 'END{print "team User pods NotFound and gpus used are: " $0+0}'
team User pods NotFound and gpus used are: 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...