我有一個CSV文件,我想根據文件中的字段進行分割。基本上,可以有兩個品牌,GVA和HBVL。我想在將文件導入數據庫之前將文件分割成每個品牌的文件。使用sed動態生成文件名
樣品的CSV文件的問題
"D509379D5055821451C3695A3752DCCD",'1900-01-01 01:00:00',"M","1740","GVA",'2009-07-01 13:25:00',0
"159A58BE41012787D531C7157F688D86",'1900-01-01 00:00:00',"V","1880","GVA",'2008-06-06 11:21:00',0
"D0BB5C058794BBE4478DDA536D1E4872",'1900-01-01 00:00:00',"M","9270","GVA",'2007-09-18 13:21:00',0
"BCC7096803E5E60E05DC12FB9951E0CF",'1900-01-01 00:00:00',"M","3500","HBVL",'2007-09-18 13:21:00',1
"7F85FCE6F13775A8A3054E3438B81599",'1900-01-01 00:00:00',"M","3970","HBVL",'2007-09-18 13:20:00',0
部分是文件的大小。這是約39mb。我在此的初始嘗試如下所示:
while read line ; do
name=`echo $line | sed -n 's/\(.*\)"\(GVA\|HBVL\)",\(.*\)$/\2/ p' | tr [:upper:] [:lower:] `
info=`echo $line | sed -n 's/\(.*\)"\(GVA\|HBVL\)",\(.*\)$/\1\3/ p'`
echo "${info}" >> ${BASEDIR}/${today}/${name}.txt
done < ${file}
大約2.5小時後,只處理了大約1/2的文件。我還有另一個文件可能達到250 MB,我無法想象需要多長時間。
我想要做的就是拔出品牌,並將行寫入以品牌命名的文件。我可以刪除品牌,但我現在不用如何使用它來創建文件。我已經開始使用sed了,但如果更合適,我不會再使用其他語言。
不使用bash的同時讀取線結構來讀取大文件,特別是如果你同時使用外部命令,像sed,或在循環TR在一起。它會極大地減緩你的處理速度。使用內部解析文件的工具,例如awk – ghostdog74 2009-10-09 00:01:36