1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
|
# 将命令输出转换为JSON格式 command_output_to_json() { local cmd="$*" local json
json=$(eval "$cmd" | column -t | awk -F ' +' ' NR==1 { n=NF for(i=1;i<=NF;i++) header[i]=$i next } BEGIN { FPAT = "([^ ]+)|(\\([^)]+\\))"; } # 定义字段模式:非空格内容或括号内容 NF>0 { row="{" for(i=1;i<=n;i++) { val=$i # 1. 先移除首尾空格 gsub(/^[ \t]+|[ \t]+$/, "", val) # 2. 合并中间多个空格为一个空格 gsub(/[ \t]+/, " ", val) # 3. 处理特殊字符转义 gsub(/\\/,"\\\\",val) gsub(/"/,"\\\"",val) row=row sprintf("\"%s\":\"%s\"", header[i], val) (i<n?",":"") } row=row "}" rows[++rowCount]=row } END { printf "[" for(i=1;i<=rowCount;i++) { printf "%s", rows[i] if(i<rowCount) printf "," } printf "]" } ') echo -n "$json" }
|