shell 文本分割

來源:互聯網
上載者:User

問題:要對一個幾G,幾千萬行的檔案進行預先處理。

功能:將一個檔案中記錄按一定的規則分割進不同的檔案。

優點:用shell指令碼做文本處理真的很方便,寥寥數行,啥都搞定了,如果用其它進階語言寫,指不定得寫多久。

缺點:單進程單線程做文本分割,耗時可能會很長。

 

在本例中,需處理的文本記錄的格式為:

fore@forest:~/work/ftr_m2_work/search/periphery/FullIndex/script$ more ./testawk.txt<br />fileID1userIDstorageID2010-10-10 09:00filename1filesizefsha<br />fileID2userIDstorageID2010-10-13 09:00filename2filesizefsha<br />

 

 

代碼:

#! /bin/bash<br />#<br />#Author: Fore<br /># Date: 2010.10.13<br />#Description : divide the records of a file into different files by date.<br />#<br />#set -x;<br />if [ $# -ne 1 ]; then<br />echo "./devideByDay.sh /dataFilePath/"<br />exit 0<br />fi<br />if [ -f $1 ]; then<br />midDir="./mid/"<br />rm -rf $midDir<br />mkdir -p $midDir</p><p>logDir="/data/logs/ftr/fullindex/"<br />mkdir -p $logDir<br />logPath=$logDir"divide.log"</p><p>i=0<br />cat $1 | while read line<br />do<br />echo $line | cut -d/ -f4 > tmp<br />cat tmp | while read dateline<br />do<br />echo $line >> $midDir$dateline<br />done</p><p>left=`expr $i % 500`<br />if [ $left -eq 0 ]; then<br />echo `date ` " "$left >> $logPath<br />fi </p><p>i=`expr $i + 1`<br />done<br />else<br />echo $1 " does not exist!"<br />fi

 

輸出:

fore@forest:~/work/ftr_m2_work/search/periphery/FullIndex/s<br />-rw-r--r-- 1 fore fore 66 2010-10-13 16:42 ./mid/2010-10-10<br />-rw-r--r-- 1 fore fore 66 2010-10-13 16:42 ./mid/2010-10-13<br />

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.