#shell #awk
#оболочка #awk
Вопрос:
У меня есть сценарий оболочки
logstash_out=`echo "green" | /opt/logstash/bin/logstash -e 'input { stdin { } } output { stdout {codec => json} }' --log.level=error`
echo "_______________________________"
echo $logstash_out
echo "_______________________________"
msg=`echo "$logstash_out" | awk -F 'input:' '{print $1}'`
echo $msg
echo "_______________________________"
msg1=`echo "$logstash_out" | awk -F '{' -v q='{' '{print q$2}'`
echo $msg1
echo "_______________________________"
Результат приведенного выше сценария :
_______________________________
Sending Logstash logs to /opt/logstash/logs which is now configured via log4j2.properties The stdin plugin is now waiting for input: {"host":"medium","@timestamp":"2020-11-19T10:32:03.860Z","message":"green","@version":"1"}
_______________________________
Sending Logstash logs to /opt/logstash/logs which is now configured via log4j2.properties The stdin plugin is now waiting for {"host":"medium","@timestamp":"2020-11-19T10:32:03.860Z","message":"green","@version":"1"}
_______________________________
{ { {"host":"medium","@timestamp":"2020-11-19T10:32:03.860Z","message":"green","@version":"1"}
_______________________________
Проблемы :
-
Я хочу разделить часть json, когда я попробую первый сценарий awk, т.е.
сообщение =
echo "$logstash_out" | awk -F 'input:' '{print $1}'
Он удаляет слово «input:» из переменной $ logstash_out вместо его разделения.То же самое можно увидеть на выходе.
-
Если я попробую второй сценарий awk, то есть
msg1 =
echo "$logstash_out" | awk -F '{' -v q='{' '{print q$2}'
Он печатает переменную «q» три раза. Кто-нибудь может помочь мне объяснить, что я делаю неправильно.
Ожидаемый результат:
{"host":"medium","@timestamp":"2020-11-19T10:32:03.860Z","message":"green","@version":"1"}
Комментарии:
1. Спасибо, что поделились своими усилиями в виде кода, продолжайте в том же духе. Не могли бы вы сообщить нам пример ожидаемого результата на ваш вопрос? Кроме
jq
того, есть ли у вас в вашей системе инструмент, который эксперты рекомендуют как идеальный инструмент для обработки JSON-файлов (или вы можете установить его в свой ящик)?2. @RavinderSingh13 Мне просто нужен вывод в виде {«host»:»medium», «@timestamp»:»2020-11-19T10:32:03.860Z», «message»:»green», «@version»:»1″}
3. Пожалуйста, обновите свой вопрос с помощью примера ввода и ожидаемого результата, пожалуйста, комментарий не предназначен для показа образцов / кодов, спасибо.
4.Пожалуйста, отредактируйте свой вопрос, чтобы включить вывод
echo "$logstash_out"
с двойными кавычками. Нет надежного способа определить, что там находится, из информации, размещенной в вопросе. Например, пропущенные новые строки в отображаемом выводе изменят поведениеawk
команд.
Ответ №1:
Я предлагаю следующее awk
решение:
awk -F "[{}]" '{print "{" $2 "}"}'
Дайте нам знать, если это поможет
Комментарии:
1. спасибо, но это не помогло, так как выдает следующий вывод {} {} {«@version»:»1″, «message»:»green», «@timestamp»: «2020-11-19T13:47:11.758Z», «host»:»medium»}