如何通过命令行参数读取文本文件并使用perl打印列?

时间:2017-02-17 05:04:33

标签: perl

如何使用perl命令行参数读取文本文件并使用perl打印第三

我很震惊地从命令行获取输入并打印所需的列。帮助我选择正确的方法来达到预期的输出。

我编写的用于获取命令行输入的代码:(map.pl

use strict;
use warnings 'all';
use Getopt::Long 'GetOptions';
my @files=GetOptions(
    'p_file=s' => \my $p_file,
);
print $p_file ? "p_file = $p_file\n" : "p_file\n";

输入以上代码:

perl map.pl -p_file cat.txt
p_file = cat.txt

cat.txt:(Input file

ADG:YUF:TGH
UIY:POG:YTH
GHJUR:"HJKL:GHKIO

预期输出:

TGH
YTH
GHKIO

2 个答案:

答案 0 :(得分:3)

Perl可以自动读取其名称作为命令行参数提供的文件。下面的命令应该产生您的预期输出

perl -F: -le 'print $F[2]' cat.txt

-F:启用autosplit模式,将字段分隔符设置为:并循环输入文件行。 -l在输入和输出期间处理行结尾。对于每行文件,执行e标志('print $F[2]'打印第3个字段)之后的代码。阅读perldoc perlrun了解更多信息。

答案 1 :(得分:1)

您需要读取文件并拆分行以获取列,然后打印所需的列。这是一个演示代码段,使用 perl -s 开关来解析命令行参数。像这样运行 ./ map.pl -p_file = cat.txt

#!/usr/bin/perl -s
use strict;
use warnings;
use vars qw[$p_file];

die("You need to pass a filename as argument") unless(defined($p_file));
die("Filename ($p_file) does not exists") unless(-f $p_file);

print "Proceeding to read file : $p_file\n\n";

open(my $fh,'<',$p_file) or die($!);

while(chomp(my $line = <$fh>)) {
        next unless(defined($line) && $line);
        my @cols = split(/:/,$line);
        print $cols[-1],"\n";
}

close($fh);