【问题标题】:Adding lines to a linux file using bash script [closed]使用 bash 脚本向 linux 文件添加行 [关闭]
【发布时间】:2022-01-24 09:12:42
【问题描述】:

我想在我的文件名 ss.josn 每个 json 对象之前添加行 '{"index":{"_id":$number_of_id}}'(这是一行)

猫 ss.json

输入示例:

{"msisdn":"255742005249","subscription_date":"2021-05-26T16:41:40.467Z","optout_date":"2022-01-03T19:12:59.808Z","total_charged_amount":1300}
{"msisdn":"255742009077","subscription_date":"2019-12-31T22:00:00.000Z","optout_date":"2022-01-09T14:08:00.282Z","total_charged_amount":3370}
{"msisdn":"255742009703","subscription_date":"2019-12-31T22:00:00.000Z","optout_date":"2022-01-01T12:34:02.104Z","total_charged_amount":400}

期望的输出:

{"index":{"_id":1}}
{"msisdn":"255742005249","subscription_date":"2021-05-26T16:41:40.467Z","optout_date":"2022-01-03T19:12:59.808Z","total_charged_amount":1300}
{"index":{"_id":2}}
{"msisdn":"255742009077","subscription_date":"2019-12-31T22:00:00.000Z","optout_date":"2022-01-09T14:08:00.282Z","total_charged_amount":3370}
{"index":{"_id":3}}
{"msisdn":"255742009703","subscription_date":"2019-12-31T22:00:00.000Z","optout_date":"2022-01-01T12:34:02.104Z","total_charged_amount":400}

【问题讨论】:

  • 到目前为止你尝试了什么?
  • @JiříBaum 试图做 for 循环以在每个 json 对象之前插入所需的行
  • 不要使用 Bash 来操作 JSON。改用 JQ:jq -s 'to_entries[] | {"index":{"_id":(.key+1)}},.value'
  • 我对问题结束的评论感觉就像宗教裁判所不知何故丢失了。我必须重新添加它。

标签: linux bash


【解决方案1】:

如果您可以确保每一行都是一个 json 结构并且您没有多行大小写,那么这样的脚本应该可以完成这项工作:

#!/bin/bash

_id=0
while read -r line; do
 echo "{"index":{"_id":$_id}}" >> result.json
 echo $line >> result.json

 _id=$((_id+1))
done < ss.json

也许不是最优雅的选择,但您将拥有一个带有所需输出的 ​​result.json 文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-04
    • 2018-05-27
    • 1970-01-01
    • 2017-11-28
    • 2020-01-07
    • 1970-01-01
    • 2014-09-17
    • 2016-08-06
    相关资源
    最近更新 更多