【问题标题】:Add two columns in text file and load to sql在文本文件中添加两列并加载到 sql
【发布时间】:2014-10-30 17:56:34
【问题描述】:

我正在尝试添加两列,然后将它们输入到我的 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 用于组织良好的问题,带有示例数据、所需的输出和一些工作代码。抱歉,我不知道 mysql 中的 LOAD TABLE。祝你好运,继续发帖! ;-)

标签: mysql sql shell


【解决方案1】:

documentation for LOAD DATA INFILE... 对此进行了介绍,不幸的是,它的组织非常糟糕。简短的回答是您可以将列分配给变量(例如@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;

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

我希望这会有所帮助。

【讨论】:

  • 非常感谢。我对提出这个问题感到尴尬,因为文档确实涵盖了这个问题。你的回答让它更清楚了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多