разделение на символ трубы в Perl - PullRequest
8 голосов
/ 06 февраля 2012

У меня маленькая проблема.Я хочу разбить строку на каждый символ канала, найденный с помощью оператора split.Как в этом примере.

echo "000001d17757274585d28f3e405e75ed|||||||||||1||||||||||||||||||||||||" | \
perl -ane '$data = $_ ; chop $data ; @d = split(/\|/ , $data) ; print $#d+1,"\n" ;'

Я ожидаю, что выходной результат 36 будет равен awk разделению с разделителем |, возвращающему 36, но вместо этого я получаю 12, как если бы разделение остановилось на символе 1 в строке.

echo "000001d17757274585d28f3e405e75ed|||||||||||1|||||||||||||||||||||||||||||||||||||||" | \ 
awk -F"|" '{print NF}'

Любая идея.Я пробовал много способов процитировать |, но безуспешно.Большое спасибо заранее.

1 Ответ

16 голосов
/ 06 февраля 2012

Согласно split:

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

Вам нужно указать отрицательный предел для разделения, чтобы получить конечные:

split(/\|/, $data, -1)
...