シェル芸マスターには程遠いですが…
digdagの設定ファイルを自動化する時(以下ブログより)にCSVファイルからループ処理をして、特定の文字列に対して条件分岐をしてみました。かなりググりましたが、参考になる記事がなかったので、参考にしてみてください!!
■while
1 2 3 |
while read ブロック変数; do 処理 done < hoge.csv |
■if
1 2 3 4 5 6 7 8 9 10 |
#!/bin/bash hoge="A" fuga="A" if [ $hoge = $fuga ]; then echo "文字列は同じです" else echo "文字列は違います" fi |
この2つの構文を使えばイケる!!?
■csv.sh
・column.csv
1 2 3 4 5 6 |
Id,ID IsDeleted,チェックボックス Name,テキスト Type,選択リスト RecordTypeId,ルックアップ(レコードタイプ) ~省略~ |
・csv.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
while read row; do column1=$(echo ${row} | cut -d , -f 1) column2=$(echo ${row} | cut -d , -f 2) column2=$(echo ${column2} | gsed -E 's/ //g') if [ "$column2" = "自動採番" ]; then column2=$(echo "INT64") elif [ "$column2" = "数値" -o "$column2" = "通貨" -o "$column2" = "数式(数値)" -o "$column2" = "数式(通貨)" -o "$column2" = "数式(パーセント)" ]; then column2=$(echo "FLOAT64") elif [ "$column2" = "日付/時間" ]; then column2=$(echo "TIMESTAMP") elif [ "$column2" = "日付" ]; then column2=$(echo "DATE") elif [ "$column2" = "チェックボックス" ]; then column2=$(echo "BOOL") else column2=$(echo "STRING") fi echo " { \"name\": \"${column1}\", \"type\": \"${column2}\" }, " done < ${CSV} > ${FILEPATH}/embulk/db/${TABLENAME}.json |
・hoge.json
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
[ { "name": "Id", "type": "STRING" }, { "name": "IsDeleted", "type": "STRING" }, { "name": "Name", "type": "STRING" }, ~省略~ ] |
■まとめ
if文がうまく動かなくてハマった!
シェルスクリプトじゃなくてPythonで書きたい。
1件のコメント
hiroysato · 2019/02/26 5:29 pm
read col1 col2のように書くと楽なケースもあるかもしれません。
#!/bin/bash
IFS=”,”
while read col1 col2 ; do
echo “col1: $col1, col2: $col2”
done < /tmp/input.txt