Linux下如何从文本文件提取指定字段并转换为JSON格式
Linux下提取文本键值对并转换为指定JSON格式的方法
输入文件内容
假设你的输入文件名为data.txt,内容如下:
Gender = Male color = green ----------------------- Age = 24 city = NY ----------------------- Profile = Blogger exp = 5
目标JSON格式
需要转换为如下结构:
{ "Gender": "Male", "City": "NY", "exp": "5" }
实现方案
方案1:使用awk+jq组合(推荐,格式更严谨)
通过awk筛选目标字段并输出JSON键值对格式的字符串,再用jq合并为完整的JSON对象:
awk -F' = ' ' /^Gender =/ {print "\""$1"\": \""$2"\""} /^city =/ {print "\"City\": \""$2"\""} /^exp =/ {print "\""$1"\": \""$2"\""} ' data.txt | jq -s 'reduce .[] as $item ({}; . + ($item | fromjson))'
- awk部分:以
=为分隔符,匹配指定行并输出符合JSON语法的键值对,同时将city重命名为City - jq部分:将awk输出的多个独立键值对字符串合并成一个标准的JSON对象
方案2:纯awk实现(无需额外工具)
如果系统未安装jq,可以直接用awk拼接出完整的JSON:
awk -F' = ' ' BEGIN {print "{"; first=1} /^Gender =/ { if (!first) print ","; print " \""$1"\": \""$2"\""; first=0 } /^city =/ { if (!first) print ","; print " \"City\": \""$2"\""; first=0 } /^exp =/ { if (!first) print ","; print " \""$1"\": \""$2"\""; first=0 } END {print "}"} ' data.txt
BEGIN块初始化JSON结构,输出左大括号并标记第一个字段无需前置逗号- 匹配目标行时,根据是否为第一个字段决定是否输出逗号,然后打印格式化后的键值对
END块输出右大括号,完成JSON结构
适配任意空格分隔的情况
如果输入文件中等号两侧的空格数量不固定(比如多个空格或制表符),可以修改awk的分隔符为:
-F'[[:space:]]*=[[:space:]]*'
这样可以匹配等号前后任意数量的空白字符。
内容的提问来源于stack exchange,提问作者ami505
相关产品推荐
相关产品推荐

