2012-04-18 2 views
1

나는 로그 파서를 작성했다. 로그는 수천 줄에서 수백만 줄까지 가능합니다. 파싱 ​​된 항목을 해시 조회 배열에 저장합니다.Perl 구문 분석 로그/결과 저장/결과 읽기

내 출력을 저장하는 방법에 대한 제안을 찾고 있으므로 스크립트를 다시 실행하면 빨리 다시 읽을 수 있습니다. 이렇게하면 로그를 다시 구문 분석 할 필요가 없습니다.

최종 목표는 사용자가 쿼리를 만들 수있는 웹 인터페이스를 갖추는 것입니다 (기본적으로 데이터베이스 내에 존재하는 것처럼 파싱 된 결과를 처리합니다).

나는 Data :: Dumper의 출력을 파일에 쓰는 것을 이미 고려했다.

다음은 Data :: Dumper로 인쇄 된 배열 항목의 예입니다.

 
$VAR = { 'weekday' => 'Sun', 'index' => 26417, 'timestamp' => '1316326961', 'text' => 'sys1 NSP Test.cpp 1000 This is a example error message. ', 'errname' => 'EM_TEST', 'time' => { 'array' => [ 2011, 9, 18, '06', 22, 41 ], 'stamp' => '20110918062241', 'whole' => '06:22:41', 'hour' => '06', 'sec' => 41, 'min' => 22 }, 'month' => 'Sep', 'errno' => '2261703', 'dayofmonth' => 18, 'unknown2' => '1', 'unknown3' => '1', 'year' => 2011, 'unknown1' => '0', 'line' => 219154 }, 
내 목표를 달성하는보다 효율적인 방법이 있습니까?

감사합니다.

+0

[Storable] (http://search.cpan.org/perldoc?Storable) 모듈은 어떻습니까? – TLP

+2

해당 데이터에는 중복 ** **이 있습니다. 'timestamp '값을 저장하면'전체 ','시간 ','초 ','분 ','월 ','일간 신문 ','연도 '등을 버릴 수 있습니다. –

답변

3

출력이 객체 인 경우 (또는 객체로 만들려는 경우) KiokuDB (선택한 데이터베이스 백엔드와 함께)을 사용할 수 있습니다. 그렇지 않은 경우 Storable을 사용할 수 있습니다. 물론 데이터 구조가 본질적으로 CSV 파일을 모방 한 경우 파일에 출력을 쓸 수 있습니다. 또는 파일에 저장할 수있는 JSON 객체에 데이터를 출력 할 수 있습니다. 또는 중매인을 용서하고 단순히 데이터베이스를 사용할 수 있습니다.

데이터 구조가 "해시 배열"(아마도 해시 참조 배열을 의미)이라고 언급했습니다. 각 해시 참조의 키가 동일하면 CSV로 저장할 수 있습니다.

데이터에 대해 구체적으로 설명하지 않고 구체적인 답변을 얻지 못할 수도 있습니다.

편집 : 지금 당신은 몇 가지 샘플 데이터를 게시 한 것을, 당신은 단순히의 값을 가진 CSV 파일이나 데이터베이스에이 쓸 수 index, timestamp, text, errname, errno, unknown1, unknown2, unknown3, 및 line.

+0

제안 해 주셔서 감사합니다. 주석의 공간이 제한되어 있으므로 자세한 정보가 포함되도록 내 설명이 업데이트되었습니다. – trialUnplugged

+0

@ trialUnplugged - 크래프트를 자르고 필수 데이터를 CSV 파일이나 데이터베이스에 저장할 수 있습니다. 위의 편집을 참조하십시오. –

+1

제안 해 주셔서 감사합니다. – trialUnplugged

1
use Storable; 

# fill my hash 
store \%hash, 'file'; 

%hash =(); 
%hash = %{retrieve('file')}; 
# print my hash 
0
당신은 항상 저장 가능한 KiokuDB, 또는 우리가 있지만, 당신이 (또는 쿼리를 지원하는 일부 데이터 저장소를) 관계형 데이터베이스를 사용하여, 집계를 할 계획하는 경우 더 이상 최고의 솔루션이 될 수 있습니다 사용할 수 있습니다

운영. 데이터베이스 서버를 실행할 필요가없는 SQLite와 같은 SQL 엔진이있는 간단한 데이터 저장소는 좋은 출발점이 될 수 있습니다.