2017-02-17 11 views
1

Как прочитать текстовый файл, используя аргументы перл командной строки и напечатать третийстолбец с помощью 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 

ответ

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); 
+0

привет я выполнен в follows' (Perl map.pl -p_file Cat.txt) '.О это ничего не возвращает @ Pradeep –

+0

Пожалуйста, проверьте пересмотренный код – Pradeep

+0

почему мы задаем равно вместо двойных кавычек @ Прадипом –

3

Perl может автоматически считывать файлы, имена которых приводятся в качестве аргументов командной строки. Приведенная ниже команда должна произвести ваш ожидаемый результат

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

-F: включает режим autosplit, устанавливает разделитель полей в : и перебирает строки входных файлов. -l обрабатывает окончания строк во время ввода и вывода. Код после e флаг ('print $F[2]' печатает 3-е поле) выполняется для каждой строки файла. Узнайте больше, прочитав perldoc perlrun.