在文本文件中添加两列并加载到sql

时间:2014-10-30 17:56:35

标签: mysql sql shell

我正在尝试添加两列,然后在我的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

1 个答案:

答案 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列的idv3v4v5v6列,分别将第2和第3列分配给变量@v1@v2。然后,它会将newval列设置为@v1 + @v2的结果。

我希望这会有所帮助。