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人
asawk
使用分隔符拆分返回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)
等