这是创建文件的写入方式吗

问题描述 投票:0回答:1

有人可以帮助修复此代码吗?我无法在运行时创建 csv 文件

#!/bin/bash

# Read JSON content from a parameter or file
JSON_CONTENTS=$(cat <<EOF
[
  {"projectName": "Project1", "jobName": "Job1", "version": "1.0"},
  {"projectName": "Project2", "jobName": "Job2", "version": "2.0"}
]
EOF
)

# Initialize CSV content
csvContent="projectName,jobName,version\n"

# Function to extract value from JSON
extract_value() {
    echo "$1" | grep -oP '(?<="'$2'":")[^"]*'
}

# Process each JSON object
IFS=$'\n' json_objects=($(echo "$JSON_CONTENTS" | tr -d '[],'))
for obj in "${json_objects[@]}"; do
    projectName=$(extract_value "$obj" "projectName")
    jobName=$(extract_value "$obj" "jobName")
    version=$(extract_value "$obj" "version")
    csvLine="${projectName},${jobName},${version}\n"
    csvContent+="$csvLine"
done

# Write CSV content to a file
echo -e "$csvContent" > module_list.csv

此脚本依赖于 grep 和 tr 等基本 shell 实用程序,使其更便携,但比使用 jq 稍微不太健壮。

groovy
1个回答
0
投票
#!/bin/bash

# Read JSON content from a parameter or file
JSON_CONTENTS=$(cat <<EOF
[
  {"projectName": "Project1", "jobName": "Job1", "version": "1.0"},
  {"projectName": "Project2", "jobName": "Job2", "version": "2.0"}
]
EOF
)

# Initialize CSV content
csvContent="projectName,jobName,version\n"

# Process JSON content
json_objects=$(echo "$JSON_CONTENTS" | tr -d '\n' | sed 's/},{/}\n{/g' | tr -d '[]')
while IFS= read -r obj; do
    projectName=$(echo "$obj" | sed -n 's/.*"projectName": *"\([^"]*\)".*/\1/p')
    jobName=$(echo "$obj" | sed -n 's/.*"jobName": *"\([^"]*\)".*/\1/p')
    version=$(echo "$obj" | sed -n 's/.*"version": *"\([^"]*\)".*/\1/p')
    csvLine="${projectName},${jobName},${version}\n"
    csvContent+="$csvLine"
done <<< "$json_objects"

# Write CSV content to a file
echo -e "$csvContent" > module_list.csv

# Display the CSV content (optional)
cat module_list.csv

© www.soinside.com 2019 - 2024. All rights reserved.