awk/sed/linux-shellスクリプトを使用してLinuxでmysqlデータベースを更新するには?

awk/sed/linux-shellスクリプトを使用してLinuxでmysqlデータベースを更新するには?

2つの列に分割された「Frequency.txt」というデータファイルがあります。列1は、IDの対応する列2との繰り返しを示す数字「Frequency」です。

例:-

データ

周波数、ID

 32    329
312    330
320    331
132    332
232    334
 52    336
 42    337
 82    338
 ..    ...     

上記のデータはmysqlデータベースの列で更新​​する必要があります。 100以上の行があり、毎日更新されます。これで、このコマンドを使用して手動で更新しています。

echo ' update table.id_set set 'frequency' = 32 whereID=329; '|mysql -B -u username -p -h database.com

上記のechoコマンドの「Frequency」と「id」の値を自動的に置き換え、Frequency.txtのすべての既存の行に対してスクリプトを実行するシェルスクリプトを作成する方法

PS:-Frequency.txtの行数は異なります。

答え1

あなたはそれを使用することができますMySQLのインポートまたは直接電話してデータファイルのロードsql文(mysql経由)。

mysqlimportは「固定幅」のデータファイルが好きではありませんが、次のことがわかります。固定幅、スペースで区切られた.txtファイルをmySQLにロードするこれを処理する方法の例です。

はい

この例は以下に依存します。仮説この列はidテーブルの主キーですid_set

LOAD DATA LOCAL INFILE '/some/path/data.txt' 
REPLACE INTO TABLE id_set
(@row)
SET frequency = TRIM(SUBSTR(@row,1,7)),
    id = TRIM(SUBSTR(@row,8,50))
;

答え2

便利なテストツールはありませんが、mysql複数のSQL文を受け入れることができる場合:

awk '{print "update table.id_set set frequency = "$1" where id = "$2";"}' < input | 
  mysql -B -u username -p -h database.com

入力例では、awkコマンドはそれを次のコマンドにmysql送信します。

update table.id_set set frequency = 32 where id = 329;
update table.id_set set frequency = 312 where id = 330;
update table.id_set set frequency = 320 where id = 331;
update table.id_set set frequency = 132 where id = 332;
update table.id_set set frequency = 232 where id = 334;
update table.id_set set frequency = 52 where id = 336;
update table.id_set set frequency = 42 where id = 337;
update table.id_set set frequency = 82 where id = 338;

関連情報