一個 Shell 程式的效能最佳化(轉)
一個 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:
寫一個雙重迴圈,外層迴圈為逐條讀取"通話話單檔案"並獲取每條記錄的第一個欄位的值"計費號碼",內層迴圈:根據外層迴圈獲得的"計費號碼"在"號段檔案"中迴圈比較,判斷此號碼是否屬於相應號段。
程式程式碼如下(省略了檔案存在性判斷等語句):
本文 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(轉)
- Linux Shell 之 我的第一個Shell程式Linux
- ORACLE SQL效能最佳化系列 (一) (轉)OracleSQL
- Linux Shell程式設計(2)——第一個shell程式Linux程式設計
- Linux的shell程式設計(一)(轉)Linux程式設計
- 如何最佳化程式的效能
- 一個完整的ftp遠端批次shell(轉)FTP
- 一個終端列印shell程式,可以自動退紙(轉)
- 對擁有一個幾十萬行表的MySQL效能最佳化的簡單辦法(轉)MySql
- 對擁有一個幾十萬行表的 MySQL 效能最佳化的簡單辦法(轉)MySql
- Nginx配置效能最佳化(轉)Nginx
- Oracle SQL效能最佳化系列講座之一(轉)OracleSQL
- Oracle效能最佳化之SQL最佳化(轉)OracleSQL
- 幾個shell程式設計小知識(轉)程式設計
- Bourne Shell及shell程式設計(轉)程式設計
- Oracle效能最佳化之應用最佳化(轉)Oracle
- Oracle效能最佳化之最佳化排序操作(轉)Oracle排序
- [轉帖]原理篇:Redis效能最佳化一定會涉及的9個專案(超全)!Redis
- shell程式設計(轉)程式設計
- 關於自定義程式的效能最佳化
- Shell的五個小應用(轉)
- Oracle效能最佳化之提升block的效率(轉)OracleBloC
- Oracle效能最佳化之Rollback(undo)Segment最佳化(轉)Oracle
- 效能最佳化指南:效能最佳化的一般性原則與方法
- shell程式設計(轉三呼的一篇文章)程式設計
- 一次搞定RedHat8.0simsun字型的shell程式(轉)Redhat
- 效能最佳化 = 改改程式碼?
- ORACLE SQL效能最佳化系列 (十) (轉)OracleSQL
- Oracle效能最佳化之LockContention(轉)Oracle
- ORACLE SQL效能最佳化系列 (十一) (轉)OracleSQL
- ORACLE SQL效能最佳化系列 (二) (轉)OracleSQL
- ORACLE SQL效能最佳化系列 (三) (轉)OracleSQL
- ORACLE SQL效能最佳化系列 (四) (轉)OracleSQL
- ORACLE SQL效能最佳化系列 (九) (轉)OracleSQL
- ORACLE SQL效能最佳化系列 (五) (轉)OracleSQL
- ORACLE SQL效能最佳化系列 (八) (轉)OracleSQL
- ORACLE SQL效能最佳化系列 (六) (轉)OracleSQL
- ORACLE SQL效能最佳化系列 (七) (轉)OracleSQL