используя команду bash в perl - PullRequest
5 голосов
/ 17 мая 2011

у меня есть короткий код bash

cat example.txt | grep mail | awk -F, '{print $1}' | awk -F= '{print $2}'

Я хочу использовать его в сценарии perl и выводить его вывод в массив строка за строкой.Я попробовал это, но не сработало

@array = system('cat /path/example.txt | grep mail | awk -F, {print $1} | awk -F= {print $2}');

Спасибо за помощь ...

Ответы [ 3 ]

11 голосов
/ 17 мая 2011

Возвращаемое значение system() - это статус возврата команды, которую вы выполнили. Если вы хотите вывод, используйте backticks:

@array = `cat /path/example.txt | grep mail | awk -F, {print \$1} | awk -F= {print \$2}`;

При оценке в контексте списка (например, когда возвращаемое значение назначено массиву), вы получите строки вывода (или пустой список, если нет вывода).

8 голосов
/ 17 мая 2011

Try:

@array = `cat /path/example.txt | grep mail | awk -F, {print \$1} | awk -F= {print \$2}')`;

Принимая во внимание, что используются обратные кавычки и что необходимо экранировать знаки доллара, поскольку оператор qx по умолчанию будет интерполировать (то есть он будет думать, что $ 1 - это переменные Perl, а не аргументы дляAWK).

2 голосов
/ 17 мая 2011

Не могу не сделать чистую версию Perl ... должно работать так же, если я правильно помню мой очень скудный awk.

use strict;
use warnings;

open A, '<', '/path/example.txt' or die $!;
my @array = map { (split(/=/,(split(/,/,$_))[0]))[1] . "\n" } (grep /mail/, <A>);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...