AWS Kinesis Firehose:如何使用AWS CLI和Bash放置包含JSON的多个文件

时间:2019-06-25 21:17:05

标签: amazon-web-services shell aws-cli amazon-kinesis-firehose

我有100多个文件,其中每一行都是一个json。看起来像这样(没有逗号,也没有[]):

{"one":"one","two":{"tree":...}}
{"one":"one","two":{"tree":...}}
...
{"one":"one","two":{"tree":...}}

要使用AWS firehose put-record-batch,文件必须采用以下格式:

[
  {
    "Data": blob
  },
  {
    "Data": blob
  },
  ...
]

我想将所有这些文件从终端放到AWS Firehose。

我正在寻找一个看起来像这样的shell脚本:

for file in files
do
  aws firehose put-record-batch --delivery-stream-name <name> --records file://$file
done

所以有两个问题:

  1. 如何将文件转换为适用的格式
  2. 而且,如何遍历所有文件

1 个答案:

答案 0 :(得分:1)

for file in *.json;
do
    jq -s . "${file}" >${file}.tmp && mv ${file}.tmp $file    
done

这将读取当前目录中的所有json文件,并将其更改为所需的格式并保存到该文件中。

或者,如果您没有jq,则这里是使用python's json模块的另一种方法。

for file in *.json;do
  while read line ; do 
      echo $line | python -m json.tool 
  done < ${file} |awk 'BEGIN{print "["}{print}END{print "]"}'
done