質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

sh

shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

Q&A

解決済

2回答

3695閲覧

CSVファイルの中を抽出してインポートしたい

s_ayana

総合スコア35

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

sh

shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

0グッド

0クリップ

投稿2018/06/05 07:34

編集2018/06/05 09:51

現在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 <<EOF

use database;

LOAD DATA INFILE '$HENSU' INTO TABLE table FIELDS TERMINATED BY ','ignore 1 lines ;

EOF
~
途中まで LOAD DATA INFILE でやろうとしたのですが、LOAD DATA INFILEにCSVの抽出条件組み込みませんか?

もしくはshellかJavaなどプログラミングのほうでCSVのデータをを上記のように抽出するやり方があれば宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

awkを使えば、条件に合致する行のみを抽出できるので、最初にデータ加工することができそうです。

bash

1$ cat data.csv 2ID,sample,example 31,10,0 42,02,1 53,10,0 64,10,0 75,02,0 86,02,3 97,10,0 108,02,A 119,10,0 1210,100,0 13 14$ cat data.csv | awk -F "," '{ if($2=="02") print $0 }' | awk -F "," '{ if($3!=0) print $0}' 152,02,1 166,02,3 178,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で)
もともと正しく動作していれば、データが変わっただけですので接続は問題なく出来るはずです。

投稿2018/06/05 14:21

編集2018/06/06 01:43
takyafumin

総合スコア2335

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

s_ayana

2018/06/06 01:20

ありがとうございます。抽出できました。 ただshellでcat awkで抽出したときだけ、mysql -h -u -p がAccess denied for user 'user'@'%' (using password: YES) ではじかれてしまいます。普通にmysql -h -u -p だとつながるのですが、権限のことなので申し訳ないのですが何か原因分かりますか?
s_ayana

2018/06/06 02:44

SQL コマンドの間違いでした。すみません。 ありがとうございました。
guest

0

直接の回答ではありません。
LOAD DATA INFILE 構文 には 条件付きで行を抽出する機能はないようです。

いったん、ワークテーブルにLOADして、
INSERT INTO TARGET_TABLE(COL1, COL2, ...) SELECT COL1, COL2, ... FROM ワークテーブル WHERE ...
とされては?

投稿2018/06/05 09:41

Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問