AWS DataPipeline でsjisからutf8に変換してgzipで圧縮したい
Published on 2019/02/15
2 min read
In category
AWS
処理の流れ
s3://inputlocation/ #ファイルが upload される場所
s3://outputlocation/ #utf8 で gzip で圧縮したファイル置き場
INPUT1STAGINGDIR
{
"directoryPath": "s3://inputlocation/",
"name": "S3InputLocation",
"id": "S3InputLocation",
"type": "S3DataNode"
},
OUTPUT1STAGINGDIR
{
"directoryPath": "s3://outputlocation/",
"name": "S3OutputLocation",
"id": "S3OutputLocation",
"type": "S3DataNode"
},
shift-jis -> utf8 変換と gzip 圧縮
#!/bin/bash
for file in `aws s3 ls s3://inputlocation/ | awk '{print $4}' | grep "^huga" `; do
echo "${file}"
iconv -f shift-jis -t utf-8 "${INPUT1_STAGING_DIR}/${file}" | gzip -c > "${OUTPUT1_STAGING_DIR}/${file}.gz"
done
shell コマンドの解説
aws s3 ls s3://inputlocation/
S3 バケットのフォルダを ls(ファイル一覧を出力)awk '{print $4}'
そのままだとファイル名以外の情報も出てくるので awk でファイル名だけ取得grep "^huga"
huga から始まるファイルを対象にしたいので grepiconv -f shift-jis -t utf-8 "${INPUT1_STAGING_DIR}/${file}"
iconv で sjis から utf8 に変換- gzip -c > "${OUTPUT1STAGINGDIR}/${file}.gz" gzip 圧縮
for で回す際に${INPUT1STAGINGDIR}でディレクトリ内のファイルで loop を回したかったが出来なかったので、直接 aws s3 コマンドで S3 バケットを指定している。