怎样用perl把一个文件里同一类数据输出到同一列,不同类的数据中间用\t隔开
例如下面这个数据:>123hello>26544#59679#123hellooo12300158669意思就是说将以>开头的输出到同一列,而#开头的又输出到另一列,以此...
例如下面这个数据:
>123hello
>26544
#59679
#123hello
oo123
00158669
意思就是说将以>开头的输出到同一列,而#开头的又输出到另一列,以此类推。 展开
>123hello
>26544
#59679
#123hello
oo123
00158669
意思就是说将以>开头的输出到同一列,而#开头的又输出到另一列,以此类推。 展开
2个回答
展开全部
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.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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
追问
额,我说的是同一类的数据排在同一列而不是同一行呀
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询