2014-10-30 84 views
1

我想添加两列,然后在我的linux系统上将它们输入到mysql中。在文本文件中添加两列并加载到sql

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? 我当前的解决方法是这样的:提前 DY

+0

对于组织良好的问题,带有样本数据,需要的输出和一些工作代码+1。对不起,我不知道mysql中的LOAD TABLE。祝你好运,并保持张贴! ;-) – shellter 2014-10-30 18:26:39

回答

2

这是包括在documentation for LOAD DATA INFILE ...这是不幸的是有组织真的很差

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; 

感谢。简而言之,您可以将列分配给变量(例如@v1),然后使用SET子句中的变量以编程方式设置列值。我将引用文档中的相关部分:

列列表可以包含列名称或用户变量。使用用户变量,SET子句使您可以在将结果分配给列之前对其值进行转换。

SET子句中的用户变量可以以多种方式使用。下面的示例直接使用所述第一输入列的t1.column1值,和第二输入栏分配给正被用于的t1.column2值之前进行除法操作的用户变量:

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; 

这台idv3v4v5,并且v6从第1和4列输入文件中的第7到第7列,并将第2列和第3列分配给变量@v1@v2。然后它将newval列设置为@v1 + @v2的结果。

我希望这很有帮助。

+0

非常感谢。在文档确实涵盖了这个问题之后,我对这个问题感到很尴尬。你的回答使它更加清晰。 – user3259040 2014-10-30 18:50:21