我從看起來像這樣的一個日誌文件中讀取:從文件讀取/寫入;與線相結合匹配行後
[2007/09/06 10:49:30, 0] lib/util_sock.c:write_data(562)
write_data: write failure in writing to client 158.136.148.93. Error Connection reset by peer
[2007/09/06 10:49:30, 0] lib/util_sock.c:send_smb(769)
Error writing 4 bytes to client. -1. (Connection reset by peer)
[2007/09/06 10:49:30, 1] smbd/service.c:make_connection_snum(950)
pubcen04 (158.136.156.79) connect to service sfengel initially as user sfengel (uid=18375, gid=122) (pid 5044)
如果一個條目包含make_connnection或close_cnum我正在寫進入所謂的data.txt另一個文件。所以,當我的程序匹配一條線時,它匹配make_connection所在的那一行,但我也需要直接在它下面一行的信息。我最近的嘗試是通過使用連接功能,但它似乎並沒有工作。
代碼這裏:
#! /usr/bin/perl
use strict;
use warnings;
use IO::File;
my $logfile = 'log.smbd';
my $cnt;
open(my $info, '<', $logfile)
or die "Could not open file '$logfile' $!";
while(my $line = <$info>) {
if(index($line, 'make_connection' || 'close_cnum') != -1) {
chomp($line);
$line = join(" ",(<$info> =~ /(\w+)\s+(\w+)/))."\n";
$line =~ s/\[//g;
$line =~ s/\]//g;
my @array = split//, $line;
open(my $fh, '>>/etc/data.txt');
print ($fh "\"$array[0]\"\,", "\"$array[1]\"\,",\"$array[5]\"\,");
}
}
設置$ /爲[然後它應該工作。 – Sobrique
歡迎來到Stack Overflow?請儘快閱讀[關於]頁面。怎麼了?你爲什麼不展示會發生什麼?我最好的猜測是'join'的第二個參數可能是一個列表上下文,列表上下文中的<>'會讀取整個文件。不要像那樣亂七八糟Perl有咬你的方法。明確閱讀額外的行。 –
索引看起來是這裏的罪魁禍首。 ||看起來並不像你想象的那樣。 – Sobrique