【发布时间】:2021-06-02 03:48:55
【问题描述】:
这是 Perl 脚本,读取包含 IP 和 stsco 名称的文件。我将项目溢出到两列并使用第二个 c2 进行处理。并调用另一个 Perl 脚本来返回我需要的值并将其打印到文件中。 如果您看到我的输入文件第 8 行( 10.22.1.50 stsco25527020 )不采用这个值,不知道为什么,可能是因为 IP 和 stsco 之间有空格。 你能帮我了解如何实现愿望输出吗?如果您知道为什么我的脚本在第 8 行没有发挥价值,也将不胜感激
use strict;
use warnings;
use Data::Dumper;
my $input_file = 'status.txt';
my $output_file = 'status_results.txt';
open my $fh, '<', $input_file or die $!;
open my $wfh, '>', $output_file or die $!;
while (<$fh>){
chomp;
next if /^\</;
next if /^\s*$/;
my ($c1, $c2) = split /\s/, $_;
my $stssysId = "$c2";
$stssysId = `/bin/call_api.pl --op=stssys_id --kv stssys_id=$stssysId | grep Status`;
print $wfh "$c2\t$stssysId\n";
}
status.txt(这是输入文件)
10.22.10.12 stsco28698039
10.22.13.38 stsco28016005
10.22.11.23 stsco28497006
10.22.10.15 stsco28598003
10.22.18.12 stsco28534122
10.22.10.15 stsco28598002
10.22.12.10 stsco26944008
10.22.1.50 stsco25527020
10.22.70.21 stsco28698022
10.22.15.22 stsco28698024
10.24.70.74 stsco9372006
10.24.54.16 stsco28698020
status_results(输出文件)
stsco28698039 "Status" : "Active",
stsco28016005 "Status" : "Active",
stsco28497006 "Status" : "Active",
stsco28598003 "Status" : "Active",
stsco28534122 "Status" : "Active",
stsco28598002 "Status" : "Active",
stsco26944008 "Status" : "Active",
stsco28698022
stsco28698024
stsco9372006
stsco28698020
stsco28598004 "Status" : "Active",
希望输出 - 或结果 -(我想删除 "status" : " 和 ')
stsco28698039 Active
stsco28016005 Active
stsco28497006 Active
stsco28598003 Active
stsco28534122 Active
stsco28598002 Active
stsco26944008 Active
stsco28698022
stsco28698024
stsco9372006
stsco28698020
stsco28598004 Active
【问题讨论】:
-
请注意,status_results.txt 输出文件中的值 stsco28698022、stsco28698024、stsco9372006、stsco28698020 为空,因为没有返回值
-
我不知道这个脚本的大部分内容在做什么,但是那个 shell 命令会立即在我的大脑中引发每一个危险信号。您将 Perl 变量插入到 shell 指令中,没有转义、没有检查、没有清理,什么都没有。即使您输入中的意外单引号或括号也会将该脚本从轨道中删除,更不用说恶意输入文件了。
-
您好@SilvioMayolo 感谢您的回复,我正在循环输入文件并查询每个 stsco ID 以检查配置状态是否处于活动状态。就像上面的输出文件一样。我调用一个 api 脚本来告诉我状态是否处于活动状态
-
@Ayad 我们永远不知道 API 脚本的作用。一旦您运行 API 脚本并打印结果以获得所需的输出,我们必须替换(使用正则表达式)变量
$stssysId中的值"Status" :。
标签: perl