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

如何在Bash中同时遍历文本文件与JSON文件

解决Bash脚本中文本行与独立JSON对象配对的问题

使用jq工具处理是最优方案,它专门用于JSON操作,能避免手动拼接JSON的语法错误,完美适配非数组格式的独立JSON对象。

前提

  • 确保file.txt的行数与file.json中的独立JSON对象数量完全匹配,每行文本对应一个JSON对象。
  • 已安装jq(Linux发行版可通过apt install jq或yum install jq安装)。

生成单个目标变量

如果只需要处理第一行文本和第一个JSON对象,生成示例格式的final变量:

final=$(jq -n --rawfile txt file.txt --slurpfile json file.json '
  {
    example: ($txt | split("\n")[0]),
    tags: $json[0]
  }' | jq -c .)

# 验证结果
echo "$final"

批量处理所有配对

如果要处理所有文本行和对应JSON对象,生成批量目标结构:

# 输出所有符合格式的单行JSON字符串
jq -n --rawfile txt file.txt --slurpfile json file.json '
  $txt | split("\n") | .[:-1]
  | zip($json)
  | map({example: .[0], tags: .[1]})
  | .[]' | jq -c .

若要将结果存入Bash数组,方便后续操作:

readarray -t finals < <(jq -n --rawfile txt file.txt --slurpfile json file.json '
  $txt | split("\n") | .[:-1] | zip($json) | map({example: .[0], tags: .[1]}) | .[]' | jq -c .)

# 遍历数组示例
for item in "${finals[@]}"; do
  echo "$item"
done

命令说明

  • --rawfile txt file.txt:将file.txt内容以原始字符串形式读入jq变量$txt。
  • --slurpfile json file.json:将file.json中所有独立JSON对象读入jq数组变量$json。
  • split("\n"):拆分文本为行数组,.[:-1]用于移除文件末尾换行生成的空行。
  • zip($json):将文本行数组与JSON对象数组按索引一一配对。
  • map(...):将每对(文本行+JSON对象)构造成目标格式的JSON对象。
  • jq -c .:将JSON压缩为单行,便于赋值给变量或批量处理。

为什么不推荐paste+循环?

手动用paste拼接后拆分,极易因JSON对象中的换行、引号等特殊字符导致格式错误,且需自行处理转义,复杂度高且易出错,jq能原生处理JSON语法,从根源避免这类问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 00:35:35