Ответ 1:
egrep -A 1 "Envvi|Department" example_1.txt | awk -F: -v ORS="-" '/Value/ {print tolower($2)}' | sed -e 's/[" ]//g' -e 's/-$/\n/' -e 's/^/aws_/'
Ввод: cat example_1.txt
{
"Key": "Envvi",
"Value": "model"
},
{
"Key": "Department",
"Value": "Sys"
}
{
"Key": "Subdept",
"Value": "io"
}
Выход:
something_model-sys
Добавление дополнительного объяснения:
1) egrep -A 1 "Envvi | Department" example_1.txt -> Выполняет поиск необходимых значений ключа и печатает эту строку и одну строку после соответствия (-A 1). Выход этого первого шага будет следующим:
"Key": "Envvi",
"Value": "model"
--
"Key": "Department",
"Value": "Sys"
2) awk -F: -v ORS = "-" '/ Value / {print tolower ($ 2)}' -> Это находит пару значений из предыдущего вывода и печатает 2-е поле, используя ":" как разделитель полей. tolower () используется для вывода нижнего регистра. Ниже приведен результат этого шага. Обратите внимание, что в конце нет новой строки, поскольку ORS установлен на «-».
"model"- "sys"-
3) sed -e 's / ["] // g' -> Эта часть берет входные данные из предыдущего шага и удаляет любые вхождения двойных кавычек и пробела. Ниже приведены выходные данные после этого шага. Обратите внимание, что до сих пор нет новой строки в конце.
model-sys-
4) 's / - $ / \ n /' -> Эта вторая часть sed берет ввод с предыдущего шага и заменяет последнее вхождение hypen (-) в конце строки новой строкой. Ниже приведен вывод после этого шага. Обратите внимание, что теперь в конце есть новая строка.
model-sys
5) 's / ^ / aws_ /' -> Эта последняя часть sed берет входные данные из предыдущего шага и добавляет строку «aws_» в начало строки.
aws_model-sys
Далее улучшенная / упрощенная версия Ответа 1, которая работает в GNU AWK (с использованием gsub):
egrep -A 1 "Envvi|Department" example_1.txt | awk -F: -v ORS="-" '/Value/ {gsub(/[" ]/,"",$2); print tolower($2)}' | sed -e 's/-$/\n/' -e 's/^/aws_/'