如何使用 awk/sed/linux-shell 脚本从 Linux 更新 mysql 数据库?

如何使用 awk/sed/linux-shell 脚本从 Linux 更新 mysql 数据库?

我有一个名为“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 whereID=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;

相关内容