一個 Shell 程式的效能最佳化(轉)

BSDLite發表於2007-08-17
一個 Shell 程式的效能最佳化(轉)[@more@]編寫 Linux Shell 指令碼程式不要僅限於完成基本的程式功能,認真的分析 Shell 指令碼並找出最佳化的方法對個人能力的提高以及對指令碼程式的質量改善都有重要的意義,希望讀者能從本文中獲得許多實用的 Shell 程式方法。
本文 Shell 程式執行環境:

程式執行環境 Redhat Linux As3
GNU bash, version 2.05b.0(1)-release (i386-redhat-linux-gnu)
程式碼清單:shellcode.txt

問題描述:有一個普通的通話話單檔案(包括"計費號碼","主叫號碼","被叫號碼","開始時間","結束時間","時長","費用"等其它欄位),要求根據另外一個號段配置檔案(由"號段下限"和"號段上限"兩個欄位組成)將此話單檔案進行分揀過慮。

分揀規則:如果通話話單檔案中的"計費號碼"位於號段檔案的某個號段內,則將此條記錄計入結果檔案 1,否則計入結果檔案 2。

通話話單檔案樣例:

9013320003|9013320003|9918128025|20060814163420|20060814163450|30|20|00|01|005
9926645208|9926645208|9918188065|20060814163415|20060814163545|90|30|00|01|005
9934877207|9934877207|9936972003|20060814163620|20060814163930|190|50|00|01|005
......
......


號段配置檔案樣例:


9013305000,9013327999
9013767000,9013768999
9923670000,9923679999
9928998000,9928999999
9932310000,9932319999
9932333400,9932333599
9936034000,9936036999
9936084000,9936084999
9998537000,9998537999
9998620000,9998629999
9998690000,9998699999


例如:

對於通話話單檔案的第一條記錄中的"計費號碼"為 9013320000,此號碼正好屬於號段配置檔案的第一個號段 9013305000,9013327999中,即:條件 9013305000<= 9013320000 <=9013327999 成立,所以應該將通話話單檔案的第一條記錄計入結果檔案 1 中;對於通話話單檔案中的第二條記錄的"計費號碼"為 9926645208 它不屬於號段檔案中的任何一個段,所以應該將通話話單的第二條記錄計入結果檔案 2 中。

對於這樣一個簡單的問題首先想到的解決方法為:

解決方法1:

寫一個雙重迴圈,外層迴圈為逐條讀取"通話話單檔案"並獲取每條記錄的第一個欄位的值"計費號碼",內層迴圈:根據外層迴圈獲得的"計費號碼"在"號段檔案"中迴圈比較,判斷此號碼是否屬於相應號段。

程式程式碼如下(省略了檔案存在性判斷等語句):
QUOTE:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617542/viewspace-962978/,如需轉載,請註明出處,否則將追究法律責任。

一個 Shell 程式的效能最佳化(轉)
請登入後發表評論 登入
全部評論

相關文章