2014-01-06 89 views
1

我想要一種快速方法將csv文件拆分爲N個大致相等的部分,並使每個部分都具有原始頭文件作爲第一行。 到目前爲止,我想出了這一點,其中工程(N = 5):將csv文件拆分爲多個部分,複製頭文件

split -da 4 -l $((`wc -l < foo.csv`/5)) foo.csv foo --additional-suffix=".csv" 
for f in `ls foo0*.csv`;do sed -i "1s/^/`head -n 1 foo.csv`\n/" $f; done; 

有誰知道如何把它變成一個班輪在那裏我被分流給新創建的文件的想法進入for循環而不是運行ls命令。

謝謝!

回答

4

根本不需要for循環。你可以簡單地這樣做:

sed -i "1s/^/`head -n 1 foo.csv`\n/" foo0*.csv 

我不認爲你可以通過sed養活新創建的文件,因爲split不給你新的文件名。

如果你真的想要一個班輪,您可以加入兩個語句與&&

split -da 4 -l $((`wc -l < foo.csv`/5)) foo.csv foo --additional-suffix=".csv" && sed -i "1s/^/`head -n 1 foo.csv`\n/" foo0*.csv 
2

不完全是一個班輪,但它可以確保頭不以任何分割的文件,然後將其添加到所有。

f=foo.csv 
header=$(sed 1q "$f") 
split -da 4 -l $((($(wc -l < "$f")-1)/5)) <(sed 1d "$f") foo --additional-suffix=".csv" 
sed -i "1i\\$header" foo0*.csv 
+0

對,我不應該將頭添加到foo0000.txt兩次,這是原代碼正在做的。 – grasshopper