파일의 필드를 기반으로 분할하고 싶은 CSV 파일이 있습니다. 기본적으로 GVA와 HBVL이라는 두 가지 브랜드가있을 수 있습니다. 데이터베이스로 가져 오기 전에 파일을 각 브랜드의 파일로 분할하고 싶습니다. CSV 파일sed를 사용하여 동적으로 파일 이름 생성
샘플 문제의
"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 메가 바이트까지의 크기가 될 수있는 또 다른 파일을 가지고 있으며 그것이 얼마나 오래 걸릴지 상상할 수 없다.
내가하고 싶은 것은 라인 밖으로 브랜드를 꺼내 브랜드 이름을 따서 파일 이름에 써 넣는 것입니다. 브랜드를 제거 할 수는 있지만 지금은 파일을 만드는 방법을 사용하지 않습니다. 나는 sed에서 시작했지만 더 적절하다면 다른 언어를 사용하는 것이 아닙니다.
당신은 또한 나오지도 같은 외부 명령어를 사용하거나 루프에서 함께 그럴 필요 특히 경우, 배쉬의 동안 큰 파일을 읽을 라인 구조를 읽을 사용하지 않습니다. 엄청나게 처리 속도가 느려집니다. awk – ghostdog74