我从blast输出中得到一个txt文件,其中包含每个查询及其命中率,%身份和分数,我需要转换为矩阵文件以创建热图 我使用了这个长命令:
perl -we "while (<>) {chomp; @col = split /\t/; push @{$score{$col[0]}{$col[1]}}, $col[2], $col[3]} @array = keys %score; print join "\t", "", @array, ""."\n"; foreach $key (keys %score) {print "$key\t"; foreach $hit (@array) {if ($score{$key}{$hit}) {print "$score{$key}{$hit}[0]\t" } else {print "\t"} } print "\n" }"
但是我得到一条评论:未加引号的字符串"t"
可能与将来在-e
第1行保留的单词冲突
生成的文件大小为0 KB
非常感谢您的帮助
答案 0 :(得分:1)
您需要在各处将"..."
替换为qq/.../
,例如
"$score{$key}{$hit}[0]\t"
成为
qq/$score{$key}{$hit}[0]\t/
但是认真的说,这是一段很长的代码,很难写成一行。将其放入文件中,假设为matrix.pl
,然后运行perl matrix.pl
。这样,您阅读和编辑 会更容易,而其他人可以帮助您
这是代码的正确布局版本
use strict;
use warnings 'all';
my %score;
while ( <> ) {
chomp;
my @col = split /\t/;
push @{ $score{$col[0]}{$col[1]} }, $col[2], $col[3];
}
my @keys = keys %score;
print join "\t", "", @keys, "" . "\n";
for my $key ( @keys ) {
print "$key\t";
for my $hit ( @keys ) {
if ( $score{$key}{$hit} ) {
print "$score{$key}{$hit}[0]\t";
}
else {
print "\t";
}
}
print "\n";
}