2017-01-18 6 views
-1

Мне нужно выполнить следующую задачу в PERL скриптВыполнение Grep, AWK в Perl

'cat $temp_file | grep $specific_word | awk '{ print \$2 }'

open(F,$temp_file); 
@list=<F>;close F; 
$specific_word ="String I want"; 
@f=grep /$specific_word/,@list; 
print $f[2]; 

Я делаю выше. Может кто-то помочь мне с этим. Есть ли альтернативный способ сделать это?

Примечание: Мне нужно напечатать второе слово каждой строки с гребнем. По приведенному выше коду я получаю только вторую строку.

+0

Perl поддерживает регулярные выражения изначально, я не думаю, что с помощью внешних инструментов даст вам наилучшие результаты. – Yaron

+0

И что происходит, когда вы запускаете свой код? Пожалуйста, посетите [help] и прочитайте [ask], чтобы узнать, как эффективно использовать этот сайт. –

+0

@JimGarrison отредактировал вопрос –

ответ

3
perl -lane "print \$F[1] if /$specific_word/" $temp_file 

Если вы действительно хотите быть многословным (убедитесь, что вы use 5.12.0 (или аналогичный), чтобы получить say:

open my $f, '<', $temp_file; 

while(<$f>) { 
     my @F = split; 
     say $F[1] if /$specific_word/; 
} 
+0

Мне нужно использовать его в моем сценарии –

+0

@VinodiniNatrajan, вы должны понять это самостоятельно. – AbhiNickz

+0

@VinodiniNatrajan Функция 'use v5.10;' или 'use 'say';' в верхней части скрипта дает вам возможность делать 'say 'hello" 'вместо' print' hello \ n "' – zdim