2011-08-10 3 views
-1
use warnings; 

$reff_filepath="/home/sharma/Documents/ref.txt"; 
open (CONFIG,"<","$reff_filepath")or die "Unable to open $reff_filepath: $!"; 

while(<CONFIG>) { 
    chomp; 
    @cols = (split(/ /))[2]; 
    push(@array, @cols); 
    print "@array\n"; 
} 

close CONFIG; 

Выход меня есть:Печати третьего слова каждого предложение

На
На референдуме
О референдуме Билл
На референдуме Билла подавляющего
На референдуме Билл подавляющего утверждал
На референдуме законопроект подавляющим образом подал иск Билл
На референдуме Билл подавлял претензий Правители законопроекта

но мой ожидается выход

На
референдума
Билл
подавляющая
утверждал
Bill
governmen

Объяснение: Я пытаюсь напечатать третье слово каждого предложения с помощью Perl. Выше я написал свой скрипт Perl. Я получил то, что ожидал выше. Но я вытолкнул этот вывод в массив, подобный этому push(@array, @cols), после чего я получил первый вывод, о котором я упоминал выше. Пожалуйста, кто-нибудь даст предложение или переписал скрипт Perl для отображения ожидаемого результата.

ответ

-1

Как насчет определения разделителя ввода на «.»?

$/ = .; 

while(<>) { 
    $i = 0; 
    @words = split(/\s+/); 
    while ($i <= $#words) { 
    push (@array, @words[$i]); 
    $i+=3; 
    } 
} 
print "@array\n"; 

или что-то подобное (я не пытался запустить этот скрипт). Вы не пытаетесь получить каждое третье слово каждого предложения, а скорее каждое третье слово во всем документе.

0

Вы печатаете массив на каждой итерации цикла.

Вы должны переместить «печать» вне цикла, а также добавить «\ п» к каждому элементу массива:

push(@array, @cols); 

} 
print "$_\n" foreach @arr; 
+0

Спасибо я получил выход ..... – user678992

1

Если вы хотите напечатать каждый третье слово, просто используйте

@cols = grep {not ++$i % 3} (split /\s+/) 
0

Одно из решений линии, чтобы распечатать каждое третье слово из каждой строки (не приговор) - он не будет печатать пустую строку, где есть меньше, чем 3 слова:

perl -e '@a = map { (split /\s+/)[2] } <>; $" = "\n"; print "@a\n";'

Это решение будет печатать пустую строку, в которой есть меньше чем 3 слова:

perl -e 'print map { (split /\s+/)[2] . "\n" } <>;'

Смежные вопросы