2016-09-19 185 views
1

我有一個CSV是4.5GB大小。我想根據列將這個CSV分成不同的文件。例如:分裂大CSV成多個文件通過

File1.csv: Cols(1,35,36,37)  
File2.csv: Cols(1,127,129,135) 
File3.csv: Cols(1,285,287,299,311) 
File4.csv: Cols(1,2,4,5,6,12,13,14) 

**注1列是一個id列,並在整個需要。

基本上我想打破這種CSV包含328列到這將是許多規模較小的CSV的MySQL的進口。

雖然我可以很容易地做到這一點與多個AWK命令我不想重新處理每個命令整個4.5GB-6GB文件。有什麼建議麼?

回答

2

您可以AWK內print到不同的文件redirect output:意外的字符

awk '{print $1, $35, $36, $37 > "file1.csv"} \ 
    {print $1, $127, $129, $135 > "file2.csv"} \ 
    {print $1, $285, $287, $299, $311 > "file3.csv"}\ 
    {print $1, $2, $4, $5, $6, $12, $13, $14 > "file4.csv"}' inFile.csv 
+0

這不幸的是拋出一個錯誤: AWK:1 '' – Mrd05d

+0

@ Mrd05d:你應該用其他兩個文件的'print'命令替換'...'。 –

+0

哦...是啊,比較遺憾的是@ Mrd05d我是懶惰,不喜歡打字了。想象一下你會得到awk重定向的要點,並從那裏採取。 :) – JNevill