2016-04-17 14 views
-1

ログファイルに次のエントリがあります。テキストファイル(PERL)のログ入出力の分割文字列

[2016-04-17 10:12:27:682011 GMT] tcp 115.239.248.245:1751 -> 192.168.0.17:8080 52976f9f34d5c286ecf70cac6fba4506 04159c6111bca4f83d7d606a617acc5d6a58328d3a631adf3795f66a5d6265f4d1ec99977a5ae8cb2f3133c9503e5086a5f2ac92be196bb0c9a9f653f9669495 (312 bytes) 

私は機械学習のための.csvファイルにこれらの作品のいくつかを書くために粉々にこの1行の文字列を分割するスクリプトを書きたいです。今まで私はこのスクリプトを入手して特定のパターンを見つけ、発見されたものを見つけたらハードコードされた検索を書いています。これは私が望むものではありません。これは私が今持っているスクリプトです。

#!/usr/bin/perl -w 

$path1 = "/home/tsec/testwatch/attackerresult.log"; 
$attacker = ">>/home/tsec/testwatch/attacker.csv"; 
#$path2 = 
#$path3 = 
#$path4 = 

#function definition #Pattern for attackerlog only 
sub extractor(){ 
open(LOG, $path1) or die "Cant't open '$path1': $!"; 
open(FILE, $attacker) or die "Can't open '$attacker': $!"; 

$target = "tcp"; 

while(<LOG>){ 

     if(/$target/){ 
     print FILE $target . "\n"; 

     } 
} 
} 
close(LOG); 
close(FILE); 

私はCSVファイルで出力はこのような何かになりたい:私は手動で

(タイトル)プロトコル、送信元IPアドレス、送信元ポート、ファイルサイズのcsvのタイトルを行うことができます

(文字列結果スクリプトから)、TCP、127.0.0.1、8080、上記312

ほんの一例です。

+0

必要な出力はあなたが – Borodin

+2

を表示入力とは無関係のように見える[PerlMonksでX-掲載](http://perlmonks.org/?node_id=1160718 ) – stevieb

答えて

0

すべての行に常に同じ数のフィールドがある場合、これは機能します。

use warnings; 
use strict; 

open my $wfh, '>', 'out.csv' or die $!; 

my $cols = "Protocol, Source IP Address, Source Port, File Size\n"; 
print $wfh $cols; 

while (<DATA>){ 
    if (/ 
      (?:.*?\s){3} # get rid of the time 
      (.*?)   # capture the proto ($1) 
      \s+   # skip the next whitespace  
      (.*?):(\d+) # separate IP and port, capture both ($2, $3) 
      .*?\(  # skip everything until an opening parens 
      (\d+)   # capture bytes ($4) 
     /x 
     ){ 
     print $wfh "$1, $2, $3, $4\n"; 
    } 
} 


__DATA__ 
2016-04-17 10:12:27:682011 GMT tcp 115.239.248.245:1751 -> 192.168.0.17:8080 52976f9f34d5c286ecf70cac6fba4506 04159c6111bca4f83d7d606a617acc5d6a58328d3a631adf3795f66a5d6265f4d1ec99977a5ae8cb2f3133c9503e5086a5f2ac92be196bb0c9a9f653f9669495 (312 bytes) 

出力ファイル:

Protocol, Source IP Address, Source Port, File Size 
tcp, 115.239.248.245, 1751, 312