前提・実現したいこと
Linuxにてcronを使用しshバッチで2つのcsvをlefter joinでかつwhereで条件指定してデータを取得したい。
最終的に出力されたものは既存のmariaDBにインサートすることになります。
具体的に実現したいこと
a.csvの中身(テーブルではありません。)
ID | 商品名 | 産地 |
---|---|---|
2176 | ちんすこうショコラ | 沖縄 |
4116 | うまい棒スペシャルチョコ | 茨城 |
7896 | バナナアイスクリーム | 東京 |
b.csvの中身(テーブルではありません。)
ID | 発売開始日 | ランキング上位flag |
---|---|---|
2176 | 2020/08/25 | 0 |
4116 | 2020/07/25 | 1 |
7896 | 2020/08/01 | 1 |
出力しDBにインサートしたいものは、ランキング上位フラグが1である方の商品名と産地になります。
方法2つ
①csvをバッチによってa.csvが入るテーブルを定義しておき、(b.csvも)、SQLのlefterJoinで結合してから出力する。
②shにてCSVの結合ができるjoinコマンドを使用しIDをキーに結合し、flag1の方だけ絞って出力する。
質問
②の方法で行いたいです。テーブルを定義すれば確実ですが、大変なため、CSV結合でshでできるのであれば実現したいと思いました。しかし、whereに相当するflagが1である分別がjoinコマンドのオプションに存在するのか知りたかったのですが、ご存じの方教えて頂けないでしょうか。
該当のソースコード
sh
1join -t, -a 1 -1 1 -2 1 -o 0 1.2 2.2 -e 'NULL' b.csv a.csv
,を区切り文字にする区切り文字 → -t,
キーにするフィールド → -1 x : 1つ目のファイルの第xフィールドを用いてjoinする
これによってIDをキーにできました。しかし、flagが1であることを条件にする方法が見当たりませんでした。
どなたかご存じの方、アドバイス頂けないでしょうか。よろしくお願い致します。
補足情報(FW/ツールのバージョンなど)
linux aws ec2
mariaDB10.2(my sql)
回答1件
あなたの回答
tips
プレビュー