You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 20:42:46