В perl
используется функция среза массива -(, что позволяет избежать необходимости в цикле for
, как вawk
):
$ echo word1,word2,word3,a,b,c,d,e | perl -F, -lane 'print join(",",@F[2..$#F])'
word3,a,b,c,d,e
Объяснение команды perl
-используемых опций строки (подробнее см. man perlrun
):
-F,
установить разделитель полей для авторазбиения на,
-l
включает автоматическую обработку окончания строки -(, т. е. автоматически удаляет новые строки с конца каждой входной строки и добавляет их в каждуюprint
-ed выходную строку ). -a
включить режим авторазбиения -каждая входная строка автоматически разбивается на массив @F
. -n
чтение и обработка каждой строки стандартного ввода и/или любых аргументов имени файла (по существу,цикл while(<>)
по всему сценарию)-e
выполнить следующий аргумент (строку в кавычках )как Perl-скрипт. Примечание:perl
Массивы основаны на нуле -, а не на единице -, поэтому третье поле — это элемент массива 2, а не 3 (, то есть @F[2]
, , а не@F[3]
).
$#F
— порядковый номер последнего элемента массива @F
, поэтому @F[2..$#F]
означает «все элементы массива @F
от третьего до последнего».
Кстати, есть еще одна опция -p
, которая очень похожа на -n
, за исключением того, что в конце каждого прохода по циклу while(<>)
также печатается входная строка. Если входная строка была изменена какими-либо предыдущими операторами, то строка печатается как измененная.
Одно из применений этого заключается в том, что он позволяет вам писать оченьsed
-подобные скрипты в perl
(, но со всеми функциями и синтаксическим сахаром perl
в дополнение кsed
). например. perl -pe 's/foo/bar/g'
и sed -e 's/foo/bar/g'
будут иметь идентичный выход при одинаковых входных данных.
Точно так же -n
в сочетании с -a
позволяет легко писать сценарии, очень похожие на awk
-. На самом деле, perl -lane
— это в значительной степени стандартный способ написатьawk
-как один вкладыш -с perl
.
Одной из сильных сторон perl
является то, что он сочетает в себе функции sed
,awk
(и tr
), а также многое другое, включая доступ к огромной библиотеке модулей, называемой «Comprehensive Perl». Архивная сеть" или CPAN