Как я могу вызвать модуль в Perl с одной строкой? - PullRequest
8 голосов
/ 08 апреля 2010

Скажем, у меня есть файл данных, который я хочу обработать; Я хочу взять максимальное значение каждого столбца и добавить его в конец каждой строки.

INPUT:

T1 T2 T3
35.82 34.67 31.68
32.20 34.52 33.59
37.41 38.64 37.56

ВЫВОД:

T1 T2 T3
35.82 34.67 31.68 35.82
32.20 34.52 33.59 34.52
37.41 38.64 37.56 38.64

Я пытаюсь реализовать это как однострочник. Пока что это то, что я придумал, хотя жалуется, что &main::max не определено:

perl -MList::Util -ani.bak -e "print qq(@F).q( ).max(@F).qq(\n)" file1.txt

Похоже, я не загрузил модуль List::Util. В чем дело? И есть ли проблема в заголовочном столбце?

perlrun не имеет достойного примера того, как это сделать ( на самом деле, моя документация немного сложна для чтения ).

Ответы [ 4 ]

20 голосов
/ 08 апреля 2010

Вы загрузили List::Util, но модуль по умолчанию не экспортирует символы. Пропустите строку заголовка, проверив, равен ли $. 1.

$ perl -MList::Util=max -ape 's/$/" " . max(@F)/e unless $.==1' input 
T1 T2 T3
35.82 34.67 31.68 35.82
32.20 34.52 33.59 34.52
37.41 38.64 37.56 38.64

Документация perlrun объясняет:

Небольшой встроенный синтаксический сахар означает, что вы также можете сказать -mmodule = foo, bar или -Mmodule = foo, bar в качестве ярлыка для -Mmodule qw(foo bar). Это избавляет от необходимости использовать кавычки при импорте символов. Фактический код, сгенерированный -Mmodule = foo, bar равен use module split(/,/,q{foo,bar}). Обратите внимание, что форма = убирает различие между -m и -M .

4 голосов
/ 08 апреля 2010
perl -M"List::Util 'max'" -ani.bak -e "print qq(@F).q( ).max(@F).qq(\n)" file1.txt
2 голосов
/ 08 апреля 2010

List :: Util был загружен, но он не экспортирует функцию max по умолчанию:

perl -MList::Util -ani.bak -e "print qq(@F).q( ).List::Util::max(@F).qq(\n)" file1.txt
1 голос
/ 08 апреля 2010

если Perl не обязателен, вот одна строка в awk

$ awk '{for(i=1;i<=NF;i++)if($i>t){t=$i};print $0,t;t=0}' file
35.82 34.67 31.68 35.82
32.20 34.52 33.59 34.52
37.41 38.64 37.56 38.64
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...