从文件中获取输入,并将每个以空格分隔的值放入变量中

时间:2011-05-10 14:14:33

标签: perl split

第一次发布海报,我第一次尝试用Perl编写脚本,所以对我很温柔。

我需要做的是读取包含ip和端口号的日志文件。该文件的内容是:

6056 255.255.255.255 6056 255.255.255.255 80
16056 255.255.255.255 16056 255.255.255.255 80
7056 255.255.255.255 7056 255.255.255.255 80
17056 255.255.255.255 17056 255.255.255.255 80

该文件包含更多此类条目。

需要提取每一行的第一个值并将其添加到变量$LocalPort,每个行的第二个值分配给$LicenseServer,第三个值$RemotePort,第四个值{{ 1}},第五个值$ShServer

在每个循环结束时,值将被插入$ShServerport变量并写入一个文件,该文件可以作为脚本运行以建立vsh连接。我可以在文件中读得很好但我不确定如何提取每个值并在每次抛出循环时将其分配给适当的值。我目前有这个:

$command

到目前为止,我所能做到的只是在读取它时吐出确切的文件。这实际上是我第一次尝试编写脚本,除了Google之外我没有接受任何其他培训。非常感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

use strict;
use warnings;

while(<>) {
    chomp;
    next if /^\s*$/; #skip empty lines
    my($local_port, $license_server, $remote_port, $sh_server, $sh_server_port) = split;
    print "$local_port\n";
    #....
}

用作

perl my_script.pl < file_with_data.txt

perl my_script.pl file_with_data.txt

答案 1 :(得分:1)

@line = <LOGFILE>将整个文件读入@line。你需要的是这样的:

while (<LOGFILE>) {
   ( $LocalPort, $LicenseServer,
       $RemotePort,$ShServer,$ShServerpor ) = split (/\s/, $_ );
}

答案 2 :(得分:0)

欢迎Dan加入stackoverflow。

#!/usr/bin/perl 
# ALWAYS declare these two lines
use strict;
use warnings;

my $logPath = '/path/to/logfile';
# use 3 args open and test for failure
open my $fh, '<', $logPath or die "unable to open '$logPath' for reading: $!";

# read one line at a time
while(my $line = <$fh>) {
    # delete line separator
    chomp $line;
    # split each line on spaces
    my ($LocalPort, $LicenseServer, $RemotePort, $ShServer, $ShServerpor) = split/\s+/, $line;

    # do the stuff with the variables

}
#close the file and test for failure
close $fh or die "unable to close '$logPath' : $!";