1. 程式人生 > >如何提高perl處理大檔案的效率

如何提高perl處理大檔案的效率

Perl最常用的功能之一是處理文字,它內嵌的強大正則表示式是其他語言難以匹敵的,然而,如果使用不當,在處理大檔案時(例如我這裡的應用程式產生的日誌,每天加起來有好幾個G),效率會非常底下。下面我總結幾個處理這些大檔案提高效率的規律,歡迎大家補充:


1)處理文字檔案,一般是逐行讀入,在這樣的迴圈裡,絕不要使用外部shell命令,例如,假如要將分析內容寫往其他檔案,那麼該老老實實的使用perl 自己的寫檔案控制代碼的方式,而不要使用shell的"echo $_ >;file"之類的命令,後者比前者慢10000倍。

2)在匹配正則表示式時,如果匹配裡含有"&"字元,那麼記得在前面加個"\"轉義,否則perl會把匹配的內容複製一份以供以後參考,這導致程式其慢無比;

3)在匹配正則表示式時,儘量不要使用i選項(區分大小寫),請將不區分大小寫的區域儘量縮小,例如/ID=something\&/i,如果只 對ID不分大小寫的話,那麼應該這麼寫:/[Ii][Dd]=something\&/,後者比前者快不止100倍;

4)在匹配正則表示式時,如果匹配項是固定不變的,那麼請使用o選項,這表示只對正則表示式編譯一次,例如/jsp/io比/jsp/i好很多。

5)while迴圈要比for/foreach迴圈效率高,

6)多用小括號,少用$&,$`,$'

7)多餘多行匹配推薦用s/m修飾符,不推薦使用$* 

相關推薦

如何提高perl處理檔案效率

Perl最常用的功能之一是處理文字,它內嵌的強大正則表示式是其他語言難以匹敵的,然而,如果使用不當,在處理大檔案時(例如我這裡的應用程式產生的日誌,每天加起來有好幾個G),效率會非常底下。下面我總結幾個處理這些大檔案提高效率的規律,歡迎大家補充: 1)處理文字檔案,一般是逐

arcgis server GP 處理檔案的方法

問題 伺服器(arcgis server 10.2)釋出GP服務,但瀏覽器解析不了百兆以上的json大檔案,無法完成GP輸入。 解決辦法 允許GP服務的上傳 功能。把大檔案上傳到arcgis server上,用返回的itemid作為輸入值。 步驟 上傳大檔案

kafka實戰 - 處理檔案需要注意的配置引數

概述   kafka配置引數有很多,可以做到高度自定義。但是很多使用者拿到kafka的配置檔案後,基本就是配置一些host,port,id之類的資訊,其他的配置項採用預設配置,就開始使用了。這些預設配置是經過kafka官方團隊經過嚴謹寬泛的測試之後,求到的最優值。在單條資訊很小,大部分場景下都能得到優異的效

如何使用GitHub LFS讓git處理檔案

1.安裝 安裝Git 進入官網GitHub LFS下載並安裝GitHub LFS 2.進入Github的本地倉庫目錄初始化LFS git init git lfs install 3.用git lfs管理大檔案 用git lfs track命令跟蹤特定字尾的大檔案,或者也可

java 記憶體對映處理檔案

    import  java.io.BufferedReader;     import java.io.File;     import java.io.FileOutputStream;    import java.io.FileReader;    import java.io.FileWrit

R 語言逐行讀取並處理檔案

用R語言作分析時,有時候需要逐行處理非常大檔案,各種教材中推薦的read.table 和scan都是一次性讀入記憶體,如果檔案有好幾個Gb大小,一般電腦肯定吃不消。其實R中可以逐行讀取的行數,這裡示例一個函式,作為備忘: con <- file("e:/data.

c++實現使用記憶體對映檔案處理檔案

摘要:本文給出了一種方便實用的解決大檔案的讀取、儲存等處理的方法,並結合相關程式程式碼對具體的實現過程進行了介紹。引言  檔案操作是應用程式最為基本的功能之一,Win32 API和MFC均提供有支援檔案處理的函式和類,常用的有Win32 API的CreateFile()、W

linux上處理檔案生成loadrunner引數dat格式的檔案直接使用

背景及需求: 匯出了線上的一批accesslog,大概有200多W條資料,獲取accesslog中URL這一個欄位出來,一共也是200多W的文字資料,如果按常規處理手段來,那無論是notepad+還是excel還是lr的dat都無法識別這麼大量的資料。 在linux上做

使用uploadify控制元件上傳檔案錯誤處理記錄

使用uploadify控制元件上傳大檔案時,會出錯:如http 404 錯誤等。 這個錯誤應該是上傳沒有成功,導致讀取上傳後的路徑不存在造成的。 實際的原因還是因為沒有能上傳成功。 上傳失敗的原因有多種,我這裡發現的情況初步判斷是因為檔案超過某個閥值造成的。 第一步: 檢視控制元件本

藍鯨平臺本地上傳檔案ERR_CONNECTION_RESE報錯處理client intended to send too large body:,server: paas.blueking.com

[[email protected] etc]# pwd /data/bkce/etc [[email protected] etc]# vim nginx.conf [[email protected] nginx]# pw

Git遷移提示檔案無法push的處理過程

  因為自己公司的gitlab被勒索病毒入侵,要把程式碼上傳到github上,但由於檔案超過100M,push被拒絕。 error tip:git large file storage this exceeds GitHub's file size limit of 100

Java用String 擷取方式解析xml檔案處理xml檔案

對於小資料返回值直接可採用Document、element的解析方式即可獲得xml節點值。 但對於返回值大於10M的資料,Document解析就顯得吃力甚至出現程式中斷情況。針對返回資料大的xml可採取Java String 分割擷取方式處理。 如下報文返回的是銀行資訊,程式需要獲得Ba

java springboot 檔案分片上傳處理

這裡只寫後端的程式碼,基本的思想就是,前端將檔案分片,然後每次訪問上傳介面的時候,向後端傳入引數:當前為第幾塊問價,和分片總數 下面直接貼程式碼吧,一些難懂的我大部分都加上註釋了: 上傳檔案實體類: /** * 檔案傳輸物件 * @ApiModel和@ApiModelProperty及C

Java NIO記憶體對映---上G檔案處理

          摘要:本文主要講了java中記憶體對映的原理及過程,與傳統IO進行了對比,最後,用例項說明了結果。一、java中的記憶體對映IO和記憶體對映檔案是什麼?       記憶體對映檔案非常特別,它允許Java程式直接從記憶體中讀取檔案內容,通過將整個或部分檔案

利用pandas進行檔案計數處理

Pandas讀取大檔案 要處理的是由探測器讀出的脈衝訊號,一組資料為兩列,一列為時間,一列為脈衝能量,資料量在千萬級,為了有一個直接的認識,先使用Pandas讀取一些 import pandas as pd data = pd.read_table

效率提升50倍,輕鬆處理資料

日前,阿里雲宣佈流計算(Aliyun StreamCompute,Powered by Blink)正式釋出商業化版本。阿里雲流計算是執行在阿里雲平臺上的流式大資料分析平臺,提供給使用者在雲上進行流式資料實時化分析工具,實現對網站資料、工業化資料、物聯網資料等各種場合進

系統技術非業餘研究 » 檔案重定向和管道的效率對比

微博上的@拉風_zhang提出了個問題: @淘寶褚霸 請教個問題,#1. cat huge_dump.sql | mysql -uroot ;#2. mysql -uroot < huge_dump.sql ;#1效率要高,在linux中通過管道傳輸 和 < 這種方式有什麼差別

iOS 檔案處理檔案的壓縮和解壓縮

5.0 大檔案的下載 (1)實現思路 邊接收資料邊寫檔案以解決記憶體越來越大的問題 (2)核心程式碼 //當接收到伺服器響應的時候呼叫,該方法只會呼叫一次 -(void)connection:(NSURLConnection *)connect

上傳檔案至阿里雲伺服器解決方案(理論上無限大檔案,支援批量處理)

一、背景     目前本地電腦有一個約120G壓縮檔案資料需要上傳到阿里雲伺服器。 二、方案 1.首先嚐試直接從本地複製檔案到雲伺服器,在檔案比較小的情況下OK。這個大檔案中途若遇到網路不穩定將會異常斷線,pass。 2.其次是將該壓縮拆分至每個少於20G,上傳至百度雲盤,

C#使用引數化和塊語句來提高處理SQL語句的執行效率

 當你的專案要求你的程式對高達幾萬條的資料在集中的時間內執行固定序列的操作,且不能完全使用儲存過程時而需要使用程式來執行時。會需要這些優化。    我們知道,SQL伺服器對一條語句的執行,需要分析、編譯、執行這些步驟,通過引數化我們可以對一種命令只分析和編譯一次,而執行多次