1

テキストファイルを取得し、そのコンテンツを使用してMySQLテーブルにデータを入力するbashスクリプトを作成しようとしています。

テキストファイルには、テーブルに追加する必要のある多数のエントリが含まれています。

テキストファイルの内容の例:

Firstname=bob
Surname=ross
Age=9
Firstname=gary
Surname=graeme
Age=19
Firstname=henry
Surname=harry
Age=23

テキストファイルは上記の例のように構造化されており、同じ3つの変数に、mysqlテーブルに入る一意のエントリごとに常に新しい値が割り当てられます。

sedを使用して、処理したくないテキストファイル内のすべての空の行と「#」で始まる行を削除しました。

私の質問は、bashを使用して、テキストファイルの内容を使用して3行ごとにSQLを挿入し、mysqlクエリを生成する方法です。テキストファイルの終わりに達するまで一度に3行ずつファイルをループし、「=」の後の各値を何らかの方法で解析し、ループの反復で変数に割り当ててmysqlデータを挿入する必要があることはわかっていますが、私はこれを行う方法がわかりません。

3行ごとに新しいテーブルエントリが必要になることはわかっています。

echo "INSERT INTO $table (Firstname, Surname, Age) VALUES ('$Firstname', '$Surname', '$age');" | mysql $db

ありがとう

4

2 に答える 2

1

入力の各行を分割して=、2番目の部分を使用します。次に、これを-loop
にパイプして、ループ内の変数を設定するために使用します。私は3行ごとに出力に改行を導入するために使用します。whileread fname sname ageNR % 3==0 {print("")}

awk -F"=" '{printf("%s ", $2)}; NR % 3==0 {print("")}' input_file | \
while read fname sname age; do
    echo "INSERT INTO $table (Firstname, Surname, Age)
      VALUES ('$fname', '$sname', '$age');" | mysql $db
done

更新:
入力:

Firstname=bob
Surname=ross
Age=9
Activity=1 2 3 4 5
Firstname=gary
Surname=graeme
Age=19
Activity=1 2 3 4 5
Firstname=henry
Surname=harry
Age=23
Activity=1 2 3 4 5

このコードで:

awk -F"=" '{printf("%s ", $2)}; NR % 4==0 {print("")}' input | \
while read fname sname age act; do
    echo "'$fname', '$sname', '$age', '$act');" 
done

与える:

'bob', 'ross', '9', '1 2 3 4 5');
'gary', 'graeme', '19', '1 2 3 4 5');
'henry', 'harry', '23', '1 2 3 4 5');
于 2012-08-14T14:23:13.653 に答える
0

ファイルの構造を変更できる場合は、LOAD DATA INFILE ...命令を使用してみてください。詳細な仕様はこちらです。自分で書くよりもずっと速いです:)

そうでない場合は、これを試してください。

于 2012-08-14T13:00:50.633 に答える