<p>好的,假设你正在处理文件:</p>
<pre><code>Miraligner_94G.txt.mirna
Miraligner_944G.txt.mirna
</code></pre>
<p>看起来你只是从每一列中挑出一列。你知道吗</p>
<p>所以:</p>
<pre><code>#!/usr/bin/env perl
use strict;
use warnings;
my %data;
my %seen;
foreach my $file ( glob("Miraligner_*") ) {
my ($freq_id) = ( $file =~ m/\_(\w+).txt/ );
$freq_id = "freq_$freq_id";
$seen{$freq_id}++;
open( my $input, "<", $file ) or die $!;
my @headers = split( ' ', <$input> );
while (<$input>) {
my %line;
@line{@headers} = split;
my $key = $line{'mir_seq'};
$data{$key}{$freq_id} = $line{'freq'};
}
close($input);
}
my @cols = sort keys %seen;
print join( "\t", "mir_seq", @cols ), "\n";
foreach my $mir_seq ( sort keys %data ) {
my @output_cols = map { $_ // 0 } @{ $data{$mir_seq} }{@cols};
print join( "\t", $mir_seq, @output_cols ), "\n";
}
</code></pre>
<p>给定数据集输出(制表符分隔):</p>
<pre><code>mir_seq freq_944G freq_94G
hsa-miR-10a-5p_GACCCTGTAGATCCGAATTTGTA 1 0
hsa-miR-10a-5p_GACCCTGTAGATCCGAATTTGTG 54 24
hsa-miR-1296-5p_TTAGGGCCCTGGCTCCATCT 0 17
hsa-miR-143-3p_TGAGAAGAAGCACTGTAGCTCTT 0 1
</code></pre>
<p>注意-如果一个值未定义,它当前将打印一个零。如果你想印别的东西,你需要修改那张地图。你知道吗</p>
<p>它还按字母顺序对大多数这些进行排序-这也可能不是你想要的,但有很多排序的例子,你可以参考。你知道吗</p>