почему соответствие шаблону awk не дает результатов? - PullRequest
2 голосов
/ 29 апреля 2019

создать файл (x) со строкой ниже 1:

{"dagId":"blashj","execDate":"20190426","status":"running","isActive":true}

-> возвращает нужное значение ---> true

cat x | sed -e 's/[{}"]/''/g' | awk -v RS=',' -F: '/^\isActive/ {print $0}'

-> почему это не таквернуть значение ??желаемое значение ---> выполняется

cat x | sed -e 's/[{}"]/''/g' | awk -v RS=',' -F: '/^\status/ {print $0}'

env - RHEL7.4, GNU Awk 4.0.2

Ответы [ 3 ]

3 голосов
/ 29 апреля 2019

Это будет потому, что \s не совпадает?

1 голос
/ 29 апреля 2019

Если, как и я, у вас нет доступа к jq на работе, я бы использовал регулярное выражение в качестве awk Разделителя записей.

$ awk -F: -v RS='[{},]' '/"isActive"/{print $2}' x
true

$ awk -F: -v RS='[{},]' '/"status"/{print $2}' x
"running"
1 голос
/ 29 апреля 2019

Я бы искренне одобрил jq, который должен быть доступен на вашей платформе:

jq -r '"isActive:"+(.isActive | tostring)' file

Если вам просто нужно это значение атрибута объекта, оно может быть таким простым, как

jq -r '.status'  file

-r или --raw-output записывает строку непосредственно в стандартный вывод, а не форматирует ее как строку JSON с кавычками

См. jq sed для json .Использование правильного инструмента экономит время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...