我有一个名为“Frequency.txt”的数据文件,分为两列,第 1 列是“频率”,它是一个数字,显示具有 ids 的相应第 2 列的重复。
例子:-
数据
频率、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 where
ID=329; '|mysql -B -u username -p -h database.com
如何编写一个 shell 脚本,该脚本将自动替换上述 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;