Perl один лайнер альтернатива этой цепочке баш? - PullRequest
1 голос
/ 12 апреля 2010

Я пытаюсь понять Perl, следуя способу, описанному в книге «Минимальный Perl».

Я загрузил все исходные текстовые файлы на свой сервер: папка результатов

Я получил вывод от использования нескольких команд bash в «цепочке», подобной этой:

cat run*.txt | grep '^Bank[[:space:]]Balance'|cut -d ':' -f2 | grep -E '\$[0-9]+'

Я знаю, что это далеко не самый лаконичный и эффективный, но, по крайней мере, он работает ...

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

Я пытаюсь что-то вроде следующего кода, но застрял в середине:

Chenxi Mao@chenxi-a6b123bb /cygdrive/c/eMarket/output
$ perl -wlne 'print; if $n=~/^Bank Balance/'
syntax error at -e line 1, near "if $n"
Execution of -e aborted due to compilation errors.

Ответы [ 2 ]

7 голосов
/ 12 апреля 2010

у вас не должно быть; после печати. Так

perl -wlne 'print $1 if $n=~/^Bank Balance\s*:\s*(\d+)/'
3 голосов
/ 12 апреля 2010
perl -F/\:/ -ane 'print $F[1]."\n" if /Bank Balance/ && $F[1]!~/\$-/' run*.txt

также вот короткая версия вашей команды bash, использующая просто awk

awk  -F": " '/Bank[ \t]*Balance/&& $2!~/\$-/{print $2}' run*.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...