如何用Shell脚本将文本文件转换为JSON文件?
需求描述
我有一个名为myfile.txt的文件,内容如下:
GYFUFGYO1 KMP-app james@qt.com CODE_SMELL GYFUFGYO2 KMP-app james@qt.com CODE_SMELL GYFUFGYG3 AFP-Login nathan@qt.com BUG GYFUFGYG4 AFP-Login nathan@qt.com BUG GYFUFGYO5 KMP-app james@qt.com CODE_SMELL GYFUFGYO6 KMP-app james@qt.com CODE_SMELL
需要将该文本转换为myfile.json,预期输出格式如下:
[ {"ApplicationName":"KMP-app","BuildBreakReason":"CODE_SMELL","DefectAuthor": "james@qt.com"}, {"ApplicationName":"KMP-app","BuildBreakReason":"CODE_SMELL","DefectAuthor": "james@qt.com"}, {"ApplicationName":"AFP-Login","BuildBreakReason":"BUG","DefectAuthor": "nathan@qt.com"}, {"ApplicationName":"AFP-Login","BuildBreakReason":"BUG","DefectAuthor": "nathan@qt.com"}, {"ApplicationName":"KMP-app","BuildBreakReason":"CODE_SMELL","DefectAuthor": "james@qt.com"}, {"ApplicationName":"KMP-app","BuildBreakReason":"CODE_SMELL","DefectAuthor": "james@qt.com"} ]
之前尝试用硬编码方式写JSON被禁止,希望通过循环读取myfile.txt的列值,动态生成目标JSON文件。
解决方案
方法1:纯Bash循环实现
创建textconvert.sh脚本,内容如下:
#!/bin/bash # 初始化JSON文件,写入数组开头 echo "[" > myfile.json line_count=0 # 逐行读取文件,忽略第一列内容 while read -r _ app author reason; do # 跳过空行 [[ -z "$app" ]] && continue # 非首行添加逗号分隔符 if (( line_count > 0 )); then echo "," >> myfile.json fi # 生成JSON对象并写入文件 echo "{\"ApplicationName\":\"$app\",\"BuildBreakReason\":\"$reason\",\"DefectAuthor\": \"$author\"}" >> myfile.json ((line_count++)) done < myfile.txt # 写入数组结尾 echo "]" >> myfile.json
执行步骤:
- 给脚本添加执行权限:
chmod +x textconvert.sh - 运行脚本:
./textconvert.sh
方法2:使用jq工具(更简洁可靠)
如果系统已安装jq,可以用一行命令完成转换,无需手动循环:
jq -R 'split(/\s+/) | {ApplicationName: .[1], BuildBreakReason: .[3], DefectAuthor: .[2]}' myfile.txt | jq -s . > myfile.json
命令说明:
-R:将输入内容视为原始字符串处理split(/\s+/):按任意空白字符分割每行内容为数组- 按需求映射为指定字段的JSON对象
-s .:将所有单个JSON对象合并为一个数组
内容的提问来源于stack exchange,提问作者Zero5
相关产品推荐
相关产品推荐

