質問: 現在csvファイルをインポートするシェルを書いているのですが、csvの中身を選んでインポートするやり方が分かりません。 具合的には、csvファイルのsampleカラムの中が02の値かつexamleカラムの中が0以外の値をインポートしたいです。 selectで例えると、 SELECT * FROM CSVファイル where sample=02 and exmple != 0; 上のこのselect条件でDBテーブルに値をインポートしたいのですが分かる方いたらお願い致します。 試しているコード #!/bin/sh HENSU=/var/tmp/$(date +%Y%m%d)/$(date +file_%d.csv) mysql -hxxx -uxxx -pxxx <
回答: `awk`を使えば、条件に合致する行のみを抽出できるので、最初にデータ加工することができそうです。 ``` $ cat data.csv ID,sample,example 1,10,0 2,02,1 3,10,0 4,10,0 5,02,0 6,02,3 7,10,0 8,02,A 9,10,0 10,100,0 $ cat data.csv | awk -F "," '{ if($2=="02") print $0 }' | awk -F "," '{ if($3!=0) print $0}' 2,02,1 6,02,3 8,02,A ``` Java等のプログラミング言語を使えばもっと柔軟な条件にも対応できますが、知識のないところから取り組むにはハードルが高いですね。 コメントを受けての回答 > > ただshellでcat awkで抽出したときだけ、mysql -h -u -p がAccess denied for user 'user'@'%' (using password: YES) ではじかれてしまいます。普通にmysql -h -u -p だとつながるのですが、権限のことなので申し訳ないのですが何か原因分かりますか? > > > 状況だけで申しますと、`mysql -h -u -p`時の認証に誤りがあることとなります。 mysql上で`select host, user from mysql.user;`にて接続しようとしている端末、ユーザが正しいか、入力しているパスワードが正しいかご確認ください。 修正後のコードの提示がないのでなんとも言えないですが、 今回の抽出をすることで接続できなくなった、ということであれば、 問題点の切り分けとして、shell以外のコマンドで抽出したcsvを作成後、shellで抽出したcsvを指定してimportを実行してください。(元のshellで) もともと正しく動作していれば、データが変わっただけですので接続は問題なく出来るはずです。