2016-08-16 57 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"); 

$