2016-08-16 56 views
-1

我想解决以下问题。我想导入大数据集,其中不同的行属于不同的表(具有完全不同的属性集)。从“混合”数据集导入数据到MySQL

该数据集由“批次”组成,每个批次都有“标题”和“表格”。标题本身由一行包含定义的一组属性组成。有几种头条新闻。以下标题中的所有行都与此标题相关,直到出现新标题。这些与特定标题相关的行可以是不同的种类,因此可以属于不同的表(包含由不同的属性集表示的不同信息)。 示例:

查看示例波纹管。我有8行。我知道第一个字符“A”或“F”定义了新批次的开始,例如标题“A”具有属性“XXX”“TTT”“ZZZ”和“YYY”(这些特定位置的特定长度) 。 A也知道以“V”或“L”开头的行包含与它们所属的批次有关的信息。但是如果“V”跟在标题“A”之后,则它包含与标题“F”之后的属性不同的属性。

现在我想要几张表。我想为各种标题(即包含标题“A”的所有信息的表格)分开表格。然后,我希望表格中所有值以“V”开头的行从批次“A”开始,另一个表格为从批次“F”开始以“V”开头的行中的所有值。我还想将标题中的选定属性复制到之后的行,因为当我例如从以“A”开始的批次开始“V”开始的所有行时,我需要知道某些信息,这些信息仅包含在标题中供我以后的工作使用。

id。值

1 AXXXTTTZZZYYY

2 VZZZTTTGGGFFF

3 VZZZTTTGGGFFF

4 LHHHBBBVVV

5 FXXXTTTSSSFFF

6 VDDDFFFGGTT

7 VDDDFFFGGTT

8 AXXXTTTZZZYYY

有没有人有一个想法如何解决这个问题? 谢谢!

+0

是id对你很重要? –

回答

0

你想有这样的输出? 第一列是你的文件的id,接下来是主表和子表之间的关系。最后是你的数据。

INSERT into main VALUES(1,1,"AXXXTTTZZZYYY"); 
INSERT into sub VALUES(2,1,"VZZZTTTGGGFFF"); 
INSERT into sub VALUES(3,1,"VZZZTTTGGGFFF"); 
INSERT into sub VALUES(4,1,"LHHHBBBVVV"); 
INSERT into main VALUES(5,2,"FXXXTTTSSSFFF"); 
INSERT into sub VALUES(6,2,"VDDDFFFGGTT"); 
INSERT into sub VALUES(7,2,"VDDDFFFGGTT"); 
INSERT into main VALUES(8,3,"AXXXTTTZZZYYY"); 

你可以用一个小awk脚本做到这一点:

$ cat split.awk 
#!/usr/bin/awk -f 

BEGIN { 
c=0; 
} 
{ 
     if(substr($2,1,1) >= "A" && substr($2,1,1) <= "F") { 
       c++; 
       print "INSERT into main VALUES(" $1 "," c ",\"" $2 "\");"; 
     } else { 
       print "INSERT into sub VALUES(" $1 "," c ",\"" $2 "\");"; 
     } 


} 

样品

$ cat list.txt | ./split.awk 
INSERT into main VALUES(1,1,"AXXXTTTZZZYYY"); 
INSERT into sub VALUES(2,1,"VZZZTTTGGGFFF"); 
INSERT into sub VALUES(3,1,"VZZZTTTGGGFFF"); 
INSERT into sub VALUES(4,1,"LHHHBBBVVV"); 
INSERT into main VALUES(5,2,"FXXXTTTSSSFFF"); 
INSERT into sub VALUES(6,2,"VDDDFFFGGTT"); 
INSERT into sub VALUES(7,2,"VDDDFFFGGTT"); 
INSERT into main VALUES(8,3,"AXXXTTTZZZYYY"); 

$