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

如何使用shell脚本或jq命令将竖线分隔TXT转换为指定JSON格式

解决方案

方案一:纯jq命令实现(最简便)

首先确认你的系统已安装jq工具,直接执行以下命令即可完成转换:

jq -R -s '
split("\n") | 
map(select(length > 0) | 
  split("|") as $f | 
  {
    ProductId: $f[0],
    PIDT: $f[1],
    RPID: $f[2],
    OfferId: $f[3],
    Product1: [
      {
        Action: $f[4] | ascii_upcase,
        ProductOfferId: $f[5]
      },
      {
        Action: $f[6] | ascii_upcase,
        ProductOfferId: $f[7],
        RemoveProduct1Instance: $f[8]
      },
      {
        Action: $f[9] | ascii_upcase,
        RemoveProduct1Instance: $f[10],
        ProductOfferId: $f[11]
      }
    ],
    Product2: [
      {
        Action: $f[12] | ascii_upcase,
        NewComponentOfferId: $f[13]
      },
      {
        Action: $f[14] | ascii_upcase,
        ComponentOfferId: $f[15],
        RemoveProduct2Instance: $f[16]
      },
      {
        Action: $f[17] | ascii_upcase,
        RemoveProduct2Instance: $f[18],
        ProductOfferId: $f[19]
      }
    ]
  }
)
' data.txt > output.json

参数说明:

  • -R:按原始字符串读取每一行输入,不自动解析为JSON
  • -s:将所有输入内容合并为单个字符串处理
  • ascii_upcase:将原数据里的Return统一转为要求的大写RETURN格式
  • select(length > 0):过滤掉文件末尾的空行,避免转换报错

方案二:Shell脚本实现(无需依赖jq,适配无jq环境)

如果你的环境无法安装jq,可以使用以下纯bash脚本实现:

#!/bin/bash
output="["
first_line=1
while IFS='|' read -r pid pidt rpid offerid \
  p1_add_act p1_add_id \
  p1_remove_act p1_remove_id p1_remove_ins \
  p1_return_act p1_return_ins p1_return_id \
  p2_add_act p2_add_id \
  p2_remove_act p2_remove_id p2_remove_ins \
  p2_return_act p2_return_ins p2_return_id || [ -n "$pid" ]; do
  if [ $first_line -eq 0 ]; then
    output="$output,"
  fi
  first_line=0
  p1_add_act=$(echo "$p1_add_act" | tr '[:lower:]' '[:upper:]')
  p1_remove_act=$(echo "$p1_remove_act" | tr '[:lower:]' '[:upper:]')
  p1_return_act=$(echo "$p1_return_act" | tr '[:lower:]' '[:upper:]')
  p2_add_act=$(echo "$p2_add_act" | tr '[:lower:]' '[:upper:]')
  p2_remove_act=$(echo "$p2_remove_act" | tr '[:lower:]' '[:upper:]')
  p2_return_act=$(echo "$p2_return_act" | tr '[:lower:]' '[:upper:]')
  output="$output
  {
    \"ProductId\": \"$pid\",
    \"PIDT\": \"$pidt\",
    \"RPID\": \"$rpid\",
    \"OfferId\": \"$offerid\",
    \"Product1\": [
      {
        \"Action\": \"$p1_add_act\",
        \"ProductOfferId\": \"$p1_add_id\"
      },
      {
        \"Action\": \"$p1_remove_act\",
        \"ProductOfferId\": \"$p1_remove_id\",
        \"RemoveProduct1Instance\": \"$p1_remove_ins\"
      },
      {
        \"Action\": \"$p1_return_act\",
        \"RemoveProduct1Instance\": \"$p1_return_ins\",
        \"ProductOfferId\": \"$p1_return_id\"
      }
    ],
    \"Product2\": [
      {
        \"Action\": \"$p2_add_act\",
        \"NewComponentOfferId\": \"$p2_add_id\"
      },
      {
        \"Action\": \"$p2_remove_act\",
        \"ComponentOfferId\": \"$p2_remove_id\",
        \"RemoveProduct2Instance\": \"$p2_remove_ins\"
      },
      {
        \"Action\": \"$p2_return_act\",
        \"RemoveProduct2Instance\": \"$p2_return_ins\",
        \"ProductOfferId\": \"$p2_return_id\"
      }
    ]
  }"
done < data.txt
output="$output
]"
echo "$output" > output.json

脚本使用说明:

  1. 给脚本添加执行权限:chmod +x convert.sh
  2. 执行脚本:./convert.sh
  3. 转换后的结果会保存在当前目录的output.json文件中

注:你给出的目标JSON示例中OfferId值20003为笔误,两个方案均按原数据实际取值(如第一条数据对应200003)处理,如果需要截断最后一位可自行修改取值逻辑。

内容的提问来源于stack exchange,提问作者Anynonym

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 10:45:03