我有9列txt文件。我打开并将其读入数组
#! /util/bin/perl
use strict;
use warnings;
open (I,"Map.txt") || die "$!\n ";
chomp (my $header =<I>);
while (<I>){
chomp(my $in=$_);
my (@array) = split('\t',$in);
$array[2] =~s/X/39/;
我只需要提取3列并按2列的顺序打印出来。
push my @entries, {
CHR => $array[2],
SNP => $array[1],
GEN => '0',
POS => $array[3],};
my @sorted = sort {
$a->{CHR} <=> $b->{CHR} ||
$a->{POS} <=> $b->{POS} } @entries;
foreach my $row (@sorted) {
print $row->{CHR}, "\t" , $row->{SNP}, "\t" , $row->{GEN},"\t",$row->{POS}, "\n";}
我不确定为什么我的排序功能无法正常工作。是因为推送步骤出现问题吗?
输入:
1 BICF2G630100019 1 31558578 0.8987 [A/G] TOP BOT 1
2 BICF2G630100032 3 31570089 0.8963 [A/G] TOP BOT 1
3 BICF2G630100034 2 31571436 0.9015 [A/G] TOP TOP 1
4 BICF2G630100043 4 31596554 0.8337 [A/G] TOP TOP 1
5 BICF2G630100054 1 31614639 0.9002 [T/C] BOT BOT 1
6 BICF2G630100063 2 31625208 0.8962 [A/G] TOP BOT 1
7 BICF2G630100075 3 31648688 0.8502 [A/C] TOP BOT 1
输出:
1 BICF2G630100019 0 31558578
3 BICF2G630100032 0 31570089
2 BICF2G630100034 0 31571436
4 BICF2G630100043 0 31596554
1 BICF2G630100054 0 31614639
2 BICF2G630100063 0 31625208
3 BICF2G630100075 0 31648688
想要的输出:
1 31558578 0 BICF2G630100019
1 31614639 0 BICF2G630100054
2 31571436 0 BICF2G630100034
2 31625208 0 BICF2G630100063
3 31570089 0 BICF2G630100032
3 31648688 0 BICF2G630100075
4 31596554 0 BICF2G630100043
答案 0 :(得分:7)
我至少看到两个问题
1 evet_att1:3;event_att2:2
2 event_att3:1
每次都重新定义条目吗?我接受了您的代码并按如下方式重写了代码(我将数据中的TAB替换为一个空格,以确保它在插入到此页面后不会丢失):
push my @entries
我的测试运行输出:
#!/usr/bin/perl
use strict;
use warnings;
my @entries;
while (<DATA>) {
chomp(my $in=$_);
my @array = split(' ', $in);
$array[2] =~s/X/39/;
push(@entries, {
CHR => $array[2],
SNP => $array[1],
GEN => '0',
POS => $array[3],
})
}
foreach my $row (@entries) {
print join("\t", @{$row}{qw(CHR POS GEN SNP)}), "\n";
}
print "\n";
my @sorted = sort {
$a->{CHR} <=> $b->{CHR} ||
$a->{POS} <=> $b->{POS} }
@entries;
foreach my $row (@sorted) {
print join("\t", @{$row}{qw(CHR POS GEN SNP)}), "\n";
}
__DATA__
1 BICF2G630100019 1 31558578 0.8987 [A/G] TOP BOT 1
2 BICF2G630100032 3 31570089 0.8963 [A/G] TOP BOT 1
3 BICF2G630100034 2 31571436 0.9015 [A/G] TOP TOP 1
4 BICF2G630100043 4 31596554 0.8337 [A/G] TOP TOP 1
5 BICF2G630100054 1 31614639 0.9002 [T/C] BOT BOT 1
6 BICF2G630100063 2 31625208 0.8962 [A/G] TOP BOT 1
7 BICF2G630100075 3 31648688 0.8502 [A/C] TOP BOT 1
后者看起来像您想要的,对吗?