我有一个文件格式如下:
Timeticks: (243749689) 28 days, 5:04:56.89
OID: .1.3.6.1
STRING: "07/10/14 - 16:36:50"
Hex-STRING: 09 15
INTEGER: 2
STRING: "STR:/storage0/Alarm/process/2/sentence xxxx"
STRING: "storage0"
STRING: "23250002"
STRING: "4039209"
INTEGER: 0
IpAddress: 172.17.1.41
STRING: "public"
OID: .1.3.6.1
我正试图修剪这些信息,但我无法完成这项工作。
我需要像这样修剪信息:
Date: 07/10/14 - 16:36:50
Process: process
Priority: 2
Sentence: sentence xxxx
Comunity: public
我试图像那样出星:
foreach my $x (@varbinds)
{
next if ($x =~ /^Timeticks:/);
next if ($x =~ /^OID:/);
next if ($x =~ /^Hex-STRING:/);
printf OUTPUT_FILE "%s\n", $x->[1];
}
有人可以帮我一把吗?
更新
这是我的结构
my (@varbinds) = @{$_[1]};
unless (sysopen(OUTPUT_FILE, $SNMPTrapperFile, O_WRONLY|O_APPEND|O_CREAT, 0666))
foreach my $x (@varbinds) {
next if ($x->[1] =~ m/Timeticks/);
next if ($x->[1] =~ m/Integer/);
if ($x->[1] =~ /^STRING/) {
printf OUTPUT_FILE "%s\n", $x->[1];
}
}
close (OUTPUT_FILE);
正确,这就是给我输出:
08/10/14 - 12:10:20
STR:/storage0/Alarm/process/2/sentence xxxx"
storage0
23250002
4065151
public
使用foreach的结构,我怎么格式化?
答案 0 :(得分:2)
这是一个解决方案,它从DATA
文件句柄读取所有信息并将其作为单个块处理。它期望在文件中只找到一组数据,并且感兴趣的行是以STRING:
开头的第一行,第二行和第六行。辅助信息取自 second 此行的最后三个字段,当它在斜杠字符/
上拆分时。
如果您希望从命令行中指定的特定文件中读取,则应使用<>
而不是<DATA>
进行阅读。如果您想对文件的路径进行硬编码,那么您需要调用open
,就像这样
open my $fh, '<', 'myfile';
并使用open
创建的文件句柄使用<$fh>
而不是<DATA>
从中读取。
use strict;
use warnings;
use 5.010;
my $data = do {
local $/;
<DATA>;
};
my @strings = $data =~ /^STRING\s*:\s*"([^"]*)/mg;
my @fields = split qr|/|, $strings[1];
printf "Date: %s\n", $strings[0];
printf "Process: %s\n", $fields[-3];
printf "Priority: %s\n", $fields[-2];
printf "Sentence: %s\n", $fields[-1];
printf "Community: %s\n", $strings[5];
__DATA__
Timeticks: (243749689) 28 days, 5:04:56.89
OID: .1.3.6.1
STRING: "07/10/14 - 16:36:50"
Hex-STRING: 09 15
INTEGER: 2
STRING: "STR:/storage0/Alarm/process/2/sentence xxxx"
STRING: "storage0"
STRING: "23250002"
STRING: "4039209"
INTEGER: 0
IpAddress: 172.17.1.41
STRING: "public"
OID: .1.3.6.1
<强>输出强>
Date: 07/10/14 - 16:36:50
Process: process
Priority: 2
Sentence: sentence xxxx
Comunity: public