【发布时间】:2018-11-06 09:42:15
【问题描述】:
Perl 新手。我需要弄清楚如何从由 (:) 分隔的文件中读取到数组中。然后我就可以操作数据了。
这里是文件“serverFile.txt”的示例(只是随机添加#) 这些字段是名称:CPU 利用率:avgMemory 使用情况:磁盘空闲
Server1:8:6:2225410
Server2:75:68:64392
Server3:95:90:12806
Server4:14:7:1548700
我想弄清楚如何将每个字段放入其适当的数组中,然后对其执行功能。例如,找到可用磁盘空间最少的服务器。
我现在的设置方式,我认为行不通。那么如何将每一行中的每个元素放入一个数组中呢?
#!usr/bin/perl
use warnings;
use diagnostics;
use v5.26.1;
#Opens serverFile.txt or reports and error
open (my $fh, "<", "/root//Perl/serverFile.txt")
or die "System cannot find the file specified. $!";
#Prints out the details of the file format
sub header(){
print "Server ** CPU Util% ** Avg Mem Usage ** Free Disk\n";
print "-------------------------------------------------\n";
}
# Creates our variables
my ($name, $cpuUtil, $avgMemUsage, $diskFree);
my $count = 0;
my $totalMem = 0;
header();
# Loops through the program looking to see if CPU Utilization is greater than 90%
# If it is, it will print out the Server details
while(<$fh>) {
# Puts the file contents into the variables
($name, $cpuUtil, $avgMemUsage, $diskFree) = split(":", $_);
print "$name ** $cpuUtil% ** $avgMemUsage% ** $diskFree% ", "\n\n", if $cpuUtil > 90;
$totalMem = $avgMemUsage + $totalMem;
$count++;
}
print "The average memory usage for all servers is: ", $totalMem / $count. "%\n";
# Closes the file
close $fh;
【问题讨论】:
-
我建议您将
($name, $cpuUtil, $avgMemUsage, $diskFree)定义为myinside 循环。这将防止您意外使用这些变量,并在代码中为您节省一个额外的定义行。这也是更合乎逻辑的方式。