怎样用perl把一个文件里同一类数据输出到同一列,不同类的数据中间用\t隔开

例如下面这个数据:>123hello>26544#59679#123hellooo12300158669意思就是说将以>开头的输出到同一列,而#开头的又输出到另一列,以此... 例如下面这个数据:
>123hello
>26544
#59679
#123hello
oo123
00158669
意思就是说将以>开头的输出到同一列,而#开头的又输出到另一列,以此类推。
展开
 我来答
百度网友d580670
2017-05-05 · TA获得超过1983个赞
知道大有可为答主
回答量:2054
采纳率:82%
帮助的人:685万
展开全部
my @t =([],[],[]);
while (<DATA>) {
chomp;
if (/^>/)    {push @{$t[0]}, $_;}
elsif (/^#/) {push @{$t[1]}, $_;}
else         {push @{$t[2]}, $_;}
}
my @m = sort(map{$#{$_}} @t);
for my $i(0..$m[$#m]) {
foreach my $e(@t) {
if ($i <= $#{$e}) {print "$e->[$i]\t";}
else {print "\t";}
}
print "\n";
}
__DATA__
>123hello
>26544
#59679
#123hello 
oo123
00158669
追问
可是为什么每次运行时会出现下面的警告呀
Unrecognized character \xC2; marked by <-- HERE after my<-- HERE near column 3 at @ line 2.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友c9e795dda
2017-05-05 · TA获得超过5167个赞
知道大有可为答主
回答量:1128
采纳率:0%
帮助的人:1137万
展开全部
use strict;
my %result;
while ( chomp (my $line = <DATA>) ) {
    $line =~ /^(.)(.+)$/;
    $result{$1} = [] unless exists $result{$1};
    push @{$result{$1}}, $2;
}

foreach my $symbol ( keys %result ) {
    print "$symbol$_\t" foreach @{$result{$symbol}};
    print $/;
}

__DATA__
>123hello
>26544
#59679
#123hello
oo123
00158669

结果:

#59679    #123hello    
oo123    
>123hello    >26544
追问
额,我说的是同一类的数据排在同一列而不是同一行呀
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式