我想將一打100MB + csv文件分割成一個捲曲文章的可管理較小文件。分裂一個CSV文件,並保持頭文件沒有中間文件
我已經設法做到了,但有很多臨時文件和IO。它正在永恆。
我希望有人能讓我更有效地做到這一點;最好用幾乎沒有磁盤IO #!/ bin/sh的
for csv in $(ls *.csv); do
tail -n +2 $csv | split -a 5 -l - $RANDOM.split.
done
# chose a file randomly to fetch the header from
header=$(ls *.csv |sort -R |tail -1 | cut -d',' -f1)
mkdir split
for x in $(/usr/bin/find . -maxdepth 1 -type f -name '*.split.*'); do
echo Processing $x
cat header $x >> split/$x
rm -f $x
done
上述腳本可能無法完全正常工作。我基本上通過這些命令的組合來工作。
我決定在上傳失敗的情況下完全讓curl POST成爲另一個步驟;如果全部發布,我不想丟失數據。但是,如果說curl錯誤,數據可能會被放入重做文件夾中,那麼這可以起作用。
#!/bin/sh
# working on a progress indicator as a percentage. Never finished.
count=$(ls -1 | wc -l 2> /dev/null | cut -d' ' -f1)
for file in $(/usr/bin/find . -maxdepth 1 -type f); do
echo Processing $file
curl -XPOST --data-binary @$file -H "Content-Type: text/cms+csv" $1
done
編輯1 - 爲什麼隨機的?因爲當拆分下一個文件時,拆分將生成完全相同的文件,如同第一個文件所做的那樣。所以... aa ab ac ...將針對每個文件生成。我需要確保通過拆分生成的每個文件在整個運行過程中都是唯一的
您總是要讓I/O從現有文件中編寫新版本的文件。儘可能高效地完成這個過程應該是你的關注焦點。因爲你的問題中有太多「其他」的東西。 (爲什麼$ RANDOM,這是您的解決方案的真正需求,還是您正在嘗試,其他方面也不清楚)。可能包括輸入文件結構的ascii藝術,然後是來自這些輸入的預期輸出文件。 (只是一個小樣本集)。祝你好運。 – shellter 2014-11-03 05:14:29
分割時總是會產生相同的文件。我需要隨機確保每個文件分割都會產生獨特的分割文件 – 2014-11-03 05:19:34
對於我來說已經很遲了,我無法從您的口頭描述中描繪出您想要做的事情,但我相信其他人很快就會用可行的解決方案來打好基礎。祝你好運! – shellter 2014-11-03 05:21:27