我正在尝试添加两列,然后在我的linux系统中将它们输入到mysql中。
id , v1 , v2 , v3 , v4 , v5 , v6
5 , 8 , 1 , 9 , 9 , 9 , 6
1 , 4 , 9 , 3 , 5 , 1 , 7
7 , 7 , 2 , 9 , 9 , 2 , 3
8 , 1 , 5 , 1 , 6 , 4 , 7
1 , 3 , 5 , 6 , 4 , 7 , 3
5 , 10 , 6 , 8 , 6 , 3 , 5
4 , 5 , 2 , 1 , 9 , 4 , 2
我想添加v1和v2并将其输入mysql。即加载到sql的实际数据是:
id , newval , v3 , v4 , v5 , v6
5 , 9 , 9 , 9 , 9 , 6
1 , 13 , 3 , 5 , 1 , 7
7 , 9 , 9 , 9 , 2 , 3
8 , 6 , 1 , 6 , 4 , 7
1 , 8 , 6 , 4 , 7 , 3
5 , 16 , 8 , 6 , 3 , 5
4 , 7 , 1 , 9 , 4 , 2
知道如何使用LOAD TABLE直接使用它吗? 我目前的解决方法是:
cat a.txt | awk -F "," '{print $1","$2+$3","$4","$5","$6","$7}' > b.txt
mysql> LOAD DATA LOCAL INFILE '/path/b.txt' INTO TABLE values;
提前致谢 DY
答案 0 :(得分:2)
documentation for LOAD DATA INFILE
中涵盖了这一点......遗憾的是,这种组织很糟糕。简短的回答是,您可以为变量分配列(例如@v1
),然后在SET
子句中使用这些变量以编程方式设置列值。我将引用文档中的相关部分:
列列表可以包含列名称或用户变量。使用用户变量,
SET
子句使您可以在将结果分配给列之前对其值执行转换。
SET
子句中的用户变量可以通过多种方式使用。以下示例直接使用第一个输入列作为t1.column1
的值,并将第二个输入列分配给在用作t1.column2
的值之前经过除法运算的用户变量:< / p>LOAD DATA INFILE 'file.txt' INTO TABLE t1 (column1, @var1) SET column2 = @var1/100;
所以在你的情况下,你需要这样的东西:
LOAD DATA LOCAL INFILE '/path/b.txt'
INTO TABLE values
(id , @v1 , @v2 , v3 , v4 , v5 , v6)
SET newval = @v1 + @v2;
这会设置输入文件中第1列和第4列的id
,v3
,v4
,v5
和v6
列,分别将第2和第3列分配给变量@v1
和@v2
。然后,它会将newval
列设置为@v1 + @v2
的结果。
我希望这会有所帮助。