perl中管道字符的拆分

perl中管道字符的拆分,perl,split,awk,Perl,Split,Awk,我有个小问题。我想在使用“拆分”操作符找到的每个管道字符处拆分一行。就像这个例子 echo "000001d17757274585d28f3e405e75ed|||||||||||1||||||||||||||||||||||||" | \ perl -ane '$data = $_ ; chop $data ; @d = split(/\|/ , $data) ; print $#d+1,"\n" ;' 我预计会有36人 asawk使用分隔符拆分返回36,但我得到12,就好像拆分在行中的1字

我有个小问题。我想在使用“拆分”操作符找到的每个管道字符处拆分一行。就像这个例子

echo "000001d17757274585d28f3e405e75ed|||||||||||1||||||||||||||||||||||||" | \
perl -ane '$data = $_ ; chop $data ; @d = split(/\|/ , $data) ; print $#d+1,"\n" ;'
我预计会有36人 as
awk
使用分隔符拆分返回36,但我得到12,就好像拆分在行中的
1
字符处停止一样

echo "000001d17757274585d28f3e405e75ed|||||||||||1|||||||||||||||||||||||||||||||||||||||" | \ 
awk -F"|" '{print NF}'
任何想法。我尝试了许多引用
|
的方法,但都没有成功。 非常感谢。

根据:

默认情况下,保留空的前导字段,删除空的尾随字段

您需要为拆分指定一个负限制以获得后续限制:

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

非常感谢。我做过很多次这样的劈叉,从来没有掉进过这样的陷阱。+1-大多数人直到遇到这种情况才意识到这一点,他们检查。从编程角度来说,这没有什么区别。如果我想测试一个值是否定义了
If(defined$my\u array[$field])
将起作用,无论是否有一个值未定义的条目
$my\u array[$field]
或是否没有定义的字段
$my\u array[$field]
“编程”,都有很大的区别。e、 例如(@myarray),
加入($sep,@myarray)