AWS Kinesis Firehose: как разместить несколько файлов, содержащих JSON, используя aws cli & bash - PullRequest
2 голосов
/ 26 июня 2019

У меня> 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 из терминала.

Я ищу сценарий оболочки, который выглядит примерно так:

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

Итак, есть 2 вопроса:

  1. Как преобразовать файлы в подходящий формат
  2. И как перебрать все файлы

1 Ответ

1 голос
/ 26 июня 2019
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
...