использование xargs с выводом по конвейеру в awk вызывает синтаксическую ошибку - PullRequest
0 голосов
/ 07 мая 2020

Команда, я прочитал много сообщений, но мне это непонятно ..

Мне нужно понять, как с этим бороться .. У меня есть xargs, которые выполняют некоторую оценку, а затем я перехожу к awk, но получаю синтаксическую ошибку

file.log

node1,
node2,
node3,

невыполнение выражения с xargs и awk

cat file.log | awk -F ',' '{print $1}' | xargs -l1 -- sh -c 'kubectl get pods --all-namespaces --no-headers --field-selector spec.nodeName=$1 | awk "{if ($1 ~ "team-") print $1,$2}"' --

переход до сюда

cat file.log | awk -F ',' '{print $1}' | xargs -l1 -- sh -c 'kubectl get pods --all-namespaces --no-headers --field-selector spec.nodeName=$1

как только я добавляю awk часть..я не понимаю.

output:

awk: line 1: syntax error at or near )

Альтернативное решение, которое я нашел, - переместить awk из xargs -. так что ниже работает. но как я могу получить awk внутри, потому что я хотел бы распечатать $ 1, который я использую в xargs, чтобы увидеть корреляцию с тем, что печатает awk.

WORKS

--field-selector spec.nodeName=$1' -- | awk '{if ($1 ~ "team-") print $1,$2}'

FAILS

--field-selector spec.nodeName=$1 | awk '{if ($1 ~ "team-") print $1,$2}' --

1 Ответ

1 голос
/ 07 мая 2020

Разобрался с помощью « Как мне использовать одинарные кавычки awk в другой фразе с одинарными кавычками? »

Вот что сработало для меня. Я процитировал awk в dQuotes, а затем экранировал $ внутри:

cat file.log | 
awk -F ',' '{print $1}' | 
xargs -l1 -- sh -c \
   'kubectl get pods --all-namespaces --no-headers \
                     --field-selector spec.nodeName=$1 | 
    awk "{if (\$1 ~ \"team-\") print \$1,\$2}"
    ' --
...