再一次,我正在寻求这个社区的帮助,使用以下Perl脚本。它使用[Excel::Writer::XLSX
] [Excel :: Writer :: XLSX]来解析大(2GB)日志文件并将输出写入Excel电子表格。
虽然大多数脚本都是正确的,但我的push
和行
$worksheet->write($row, 1, $key, $format );
$worksheet->write($row, 5, $eventdetail{"$key"}, $format );
答案 0 :(得分:4)
我不同意“大部分脚本都是正确的”。这是一个混乱,并且有一个很多比你描述的问题更错误。
例如,您似乎希望\w
与冒号:
匹配,而您正在使用捕获变量$1
,$2
等。在正则表达式中相应的捕获。 $0
甚至根本不是捕获,但包含当前运行的Perl程序文件的名称。
它不会影响代码的功能,但将正则表达式保留为字符串意味着您在运行时不必要地反复编译它们,这将使速度降低很多。写得好得多,例如
my $integrity_regex = qr/^Integrity checksum changed for: (.*)$/;
if ($line =~ $integrity_regex) { ... }
然后在编译时只编译一次模式。
该行
$line =~ /$$user_name_regex/
尝试取消引用一个字符串,好像它是一个标量引用,这显然是错误的。
您在循环中声明变量$user_name
,$account_name
和$source_addr
,因此在您指定它们后会立即将其删除。
可能还有很多错误,但是当你手头有实时数据时,调试自己的编程要容易得多,而不是让我仔细检查编程是否存在错误。
你似乎已经从头开始编写了整个程序而没有测试它,直到它“完成”。这是错误的方法:你应该逐步编写并在添加它时测试每个部分。
我建议您通过检查日志文件中应该匹配的行的每个正则表达式来开始修复问题。