December 12,2006

用自由軟體助客戶一臂之力:用zcat跟grep撈資料

嗯,竟然又超過一週沒有更新網誌,簡單寫一下前一陣子幫客戶撈資料的方法吧!

事情是這樣的,我們家的某套系統,會把一些csv格式的資料餵進資料庫,讓客戶使用我們的圖形介面工具做查詢、統計、告警之類的動作。

當然,資料庫不可能永遠保存舊資料,於是,每天凌晨會把(超過XX天)的舊資料匯出,再從資料庫刪除。

這些csv是每分鐘產生,來自數台機器,匯入的時候還好,到了匯出的時候,變成以「天」為單位,一天的舊資料倒出來變成一個很大的文字檔(對,又倒回csv格式)。

問題來了,偶爾,客戶還是會想要撈一些舊資料,這時候已經無法透過我們提供的圖形介面,必須要在那些倒出來的文字檔裡面搜尋。

那台機器跑的是Microsoft Windows,而這些檔案的大小往往都是GB起跳,在任何一個檔案裡面搜尋特定的字串,乍看之下就成了不可能的任務。(用什麼軟體打的開這麼大的檔案呢?Notepad還是Wordpad?

最後我幫客戶安裝 cygwin ,平常用 gzip 指令把那些檔案壓縮起來,需要撈東西的時候,就用 zcat file_name.csv.gz | grep "search_pattern" > result_file.csv 這樣的指令來撈;客戶只要確定 file_name.csv.gz 包含了她要的時間點,再確定 search_pattern 是她要的字串,搜尋結果就會放在result_file.csv。

Posted by ystuan at 樂多Roodo! │17:46 │回應(2)引用(0)ItchScratching
樂多分類:網路/3C 共同主題:自由軟體 工具:編輯本文
Ads by Roodo! 

引用URL

http://cgi.blog.roodo.com/trackback/2564639
回應文章
還有這招啊~學起來.
Posted by fireman at December 22,2006 13:31
fireman,

哪裡哪裡,還好客戶願意使用指令,不然如果還要生個GUI我就頭大了。

喔,後來客戶想要批次執行這樣的動作,並且全部導向到同一個檔案。

如果我自己做,我會寫成一個script,檔名取成 xxx.sh ,然後把上面指令重複數次,不過,第二次開始就要用 >> 取代 > ,得到的結果才會附加(append)在後面,而不是覆蓋(overwrite)。

最後,還要變更檔案成為可執行(chmod u+x xxx.sh)

不過,為了簡化這些步驟,我就請她編輯一個文字檔(假設叫做test.txt),把所有指令用分號隔開,寫成ㄧ行:

zcat file_name1.csv.gz | grep "search_pattern" > result_file.csv;zcat file_name2.csv.gz | grep "search_pattern" >> result_file.csv;zcat file_name3.csv.gz | grep "search_pattern" >> result_file.csv;

最後,請她執行指令

sh test.txt

這樣就可以了。
Posted by PowerOp at December 24,2006 23:20