이 출력이 있고 이를 프로메테우스와 유사한 형식으로 변환하고 싶습니다.황금빛 봄.
cat /tmp/wp-plugin.txt | jq .[]
{
"name": "akismet",
"status": "active",
"update": "none",
"version": "5.0"
}
{
"name": "performance-lab",
"status": "active",
"update": "none",
"version": "1.4.0"
}
내 목표는 JQ CLI 도구를 사용하여 이 효과를 얻는 것입니다.
wp_plugins{name="akismet",status="active",update="none",version="5.0"}0
wp_plugins{name="performance-lab",status="active",update="active",version="1.4.0"}1
답변1
사용 jq
:
jq -r 'to_entries[] | .key as $k | .value | to_entries | map("\(.key)=\(.value|@json)") | "wp_plugins{\(join(","))}\($k)"' file
또는
jq -r 'to_entries[] | .key as $k | .value | to_entries | "wp_plugins{\(map("\(.key)=\(.value|@json)")|join(","))}\($k)"' file
이것은 원시 JSON 파일을 가져와서 먼저 사용합니다 to_entries
. 키는 배열 인덱스가 되고 값은 실제 객체가 됩니다.
따옴표가 없는 키와 따옴표가 있는 값을 사용하여 쉼표로 구분된 키-값 목록을 생성하므로 =
각 키와 값 사이에 핸들 .value
(즉, 객체)이 필요합니다. to_entries
이를 다시 전달하여 새로운 키와 값 목록을 얻습니다.
그런 다음 키와 값은 찾고 있는 형식으로 출력을 구성하는 문자열 생성자에 전달되어 wp_plugins{
쉼표로 구분된 목록의 시작 부분에 문자열을 추가하고 }
끝에 배열 인덱스를 추가합니다.
질문에 있는 데이터의 출력 제공(데이터가 처음 배열에 입력될 때):
wp_plugins{name="akismet",status="active",update="none",version="5.0"}0
wp_plugins{name="performance-lab",status="active",update="none",version="1.4.0"}1
0
키가 아닌 경우 출력 줄 끝에 a를 사용하여 변형을 수정했습니다 .update
available
1
available
jq -r '
to_entries[] |
(if .value.update == "available" then 1 else 0 end) as $v |
.value | to_entries |
map("\(.key)=\(.value|@json)") | join(",") |
"wp_plugins{\(.)}\($v)"' file