我有一个csv,ids.csv,格式为:
plot(mtcars$mpg , mtcars$wt, xlab="mpg", ylab = "wt", pch = 19)
abline(lm(wt ~ mpg, mtcars))
和文件夹中的一堆json文件匹配csv中的名称,如Case A.json,格式如下:
id,name,slug
12345,Case A,case-a-12345
12824,Case B,case-b-12824
我希望将csv中的名称与json文件的名称相匹配,并将id,name和slug添加到属性中,以便我得到:
{
"type": "mass"
"features": [
{
"type": "sub",
"properties": {
"key1": "value1",
"key2": "value2"
}
}
]
}
到目前为止,我只知道如何使用jq添加值,如:
{
"type": "mass"
"features": [
{
"type": "sub",
"properties": {
"key1": "value1",
"key2": "value2",
"id": "12345",
"name": "Case A",
"slug": "case-a-12345
}
}
]
}
如何从csv中提取我的值,将其与正确的json文件匹配,并将其应用于我的所有json文件?
答案 0 :(得分:3)
从CSV文件中提取正确的字段后,您可以使用+=
运算符。我建议您不要使用bash
,但只要您在字段值中没有引号,就可以使用简单的while
循环。
{
read # Skip the header
while IFS=, read -r id name slug; do
jq --args id "$id" \
--args name "$name" \
--args slug "$slug" \
'features[0].properties += {id: $id, name: $name, slug: $slug}' "$name.json" > tmp && mv tmp "$name.json"
done
} < ids.csv