我在HP-UX服务器上不断更新大量日志文件。我创建了Perl代码来查找日志文件的名称,其中字符串i' m使用驻留在里面。 的Perl采用分体式获取文件名,并将其传递到variable.Using我创建的启动和停止的字符串作为两个variables.Such作为userinput:在Perl中使用awk解析两个字符串之间的所有内容
my $ssh = Net::OpenSSH->new($host, user => $user,
master_opts => [ -o => 'NumberOfPasswordPrompts=1',
-o => 'PreferredAuthentications=keyboard-interactive,password'],
login_handler => \&login_handler);
$ssh-> error and die "Unable to connect" . $ssh->error;
my $output=$ssh->capture("grep .$userinput1. /app/bea/user_projects/domains/granite/om_ni.log*");
my $array = (split ":", $output)[0];
print "$array"."\n";
[编辑]:正如你们的要求,以上是在$数组是怎么填in.Below之初就是awk的顺序开始:
my $a= "INFO - $userinput1";print $a;
my $b= "INFO - ProcessNode terminated... [$userinput1]";print $b;
使用AWK如SSH捕获命令的一部分,它会通过整个日志文件搜索和捕捉之间每行字符串$ a和字符串$ b,然后获取另一个数组中的所有内容。例如:
my $output2=$ssh->capture("awk -v i=$array '$a,$b' i");
这里$ array是日志文件完整路径的保存位置,它作为传递变量的工作方式非常好。 我尝试使用没有-v参数的awk,根本没有关系。
[编辑2]:这是打印“$ array”的结果。“\ n”;
/app/bea/user_projects/domains/granite/om_ni.log.2
当我运行perl脚本,我得到的结果是:
INFO - 28B26AD1-E959-4F5F-BD89-A7A6E601BE18INFO - ProcessNode terminated... [28B26AD1-E959-4F5F-BD89-A7A6E601BE18] syntax error The source line is 1.
The error context is
INFO - 28B26AD1-E959-4F5F-BD89-A7A6E601BE18,INFO - ProcessNode >>> terminated. <<< .. [28B26AD1-E959-4F5F-BD89-A7A6E601BE18]
awk: Quitting
The source line is 1.
错误在“终止”二字指向莫名其妙,但即使我使用转义字符遍及字符串,它只是没有按不在乎并返回相同的错误。
在这个问题上的任何帮助是高度赞赏。提前感谢了很多。
很高兴看到完整的代码。 'capture'之前执行'$ ssh-> login'吗? – 2013-04-26 09:16:17
我们看不到你的整个命令,因为你没有向我们展示'$ array'是什么。建议:在你的脚本中加入'print'awk -v i = $ array'$ a,$ b'i“',看看你试图运行的命令是什么样的。这可能会使错误变得明显。但是,如果没有,请更新问题以包含您正在运行的确切命令(打印语句的输出)。 – 2013-04-26 09:38:55
@DmitryMina,这是一个Awk错误,所以看起来SSH连接正在工作。 – 2013-04-26 10:48:51