我有一个CSV文件,其中包含 IP(有效)字段,如下所示:
ip, alive
127.0.0.1, Yes
127.0.0.2, No
我想ping每个IP,如果ping可达,那么我需要在同一CSV文件中的IP前面加上Yes。
我正在尝试使用下面的代码,但只能读取和写入相同的CSV文件。
#!/usr/bin/perl
use strict;
use warnings;
use Net::Ping;
use Data::Dumper;
my $file = 'servers.csv';
my @filedata;
open(my $fh, '<', $file) or die "Can't read file '$file' [$!]\n";
while (my $line = <$fh>) {
chomp $line;
my @fields = split(/,/, $line);
push @filedata, \@fields;
}
print Dumper(@filedata);
my $p = Net::Ping->new();
if ($p->ping('127.0.0.1'))
{
print "\nYes\n";
}
我用于ping和读取文件的代码可以正常工作,但是我不确定要遍历从文件读取的数据,然后ping并将结果存储回CSV文件。
任何帮助将不胜感激。
答案 0 :(得分:2)
npx create-react-app
答案 1 :(得分:-1)
我认为这可以满足您的要求
#!/usr/bin/perl
use strict;
use warnings;
use Net::Ping;
use Data::Dumper;
use File::Copy;
my $file = 'servers.csv';
my $fileOut = 'serversOut.csv';
my @filedata;
open(my $fh, '<', $file) or die "Can't read file '$file' [$!]\n";
open(my $fhOut, '>', $fileOut) or die "Can't read file '$fileOut' [$!]\n";
while (my $line = <$fh>) {
chomp $line;
my @fields = split(/,/, $line);
my $p = Net::Ping->new();
if($fields[0] eq 'ip') {
print "Header $fields[0]\n";
print $fhOut 'ping, ' . $line . "\n";
next;
}
if ($p->ping($fields[0])) {
print "Pinging $fields[0] - yes\n";
print $fhOut 'Yes, ' . $line . "\n";
}
else {
print "Pinging $fields[0] - no\n";
print $fhOut 'No, ' . $line . "\n";
}
}
close $fh;
close $fhOut;
move($fileOut, $file) or die "Can't move '$fileOut' file '$file' [$!]\n";
答案 2 :(得分:-1)
#!/usr/bin/perl
use strict;
use warnings;
use Net::Ping;
use Data::Dumper;
my $file = 'servers.csv';
my @filedata;
my $p = Net::Ping->new();
open(my $fh, '<', $file) or die "Can't read file '$file' [$!]\n";
while (my $line = <$fh>) {
chomp $line;
my @fields = split(/,/, $line);
unless ($. == 1) { #ignore the header row
$fields[1] = $p->ping($fields[0]) ? " Yes": " No";
}
push @filedata, \@fields;
}
close($fh);
open( $fh, '>', $file) or die "Can't read file '$file' [$!]\n";
print $fh join(",", @$_) . "\n" for @filedata;
原位编辑可能会出错,请保留servers.csv
文件的备份。